高阶函数2

18 阅读2分钟

1.reduce函数

一种集合操作,对于集合中的元素进行聚合操作,返回一个单一的结果。通过制定的二元操作对集合的所有元素进行递归处理即取两个元素进行操作),并最终将其合并为一个值

eg1:

相加

al arr = Array(1,2,3,4,5)

val rst = arr.reduce((x,y) => x + y)//求和操作
println(s"rst = ${rst}")//15

eg2:

输出下列数中的最大值和最小值

val arr = Array(-1,2,30,5)

//求最大值
val rst_max = arr.reduce( (x,y) => if(x > y) x else y )

//求最小值
val rst_min = arr.reduce( (x,y) => if(x < y) x else y )

println(s"rst = ${rst_max}")  //30
println(s"rst = ${rst_min}")  //-1

2.reduceLeft-reduceRight

//定义一个数组
val arr = Array(1,2,3,4)

//reduce ==== reduceLeft
//val rst = arr.reduceLeft( (x,y) => x - y )
val rst = arr.reduceRight( (x,y) => x - y)

println(s"rst = ${rst}")

3.fold

fold:与reduce类似,都是做聚合操作。但是他有一个初始值

//定义一个数组
val arr = Array(1,2,3,4)

val rst = arr.fold(10)( (x,y) => x + y)  //求和
//10为初始值,计算过程为((((10+1)+2)+3)+4,依次进行计算

println(s"rst = ${rst}")

4.sorted排序

对数组进行排序

//定义一个数组
//val arr = Array(-1,20,3,40)

//val arr1 = arr.sorted

//arr1.foreach(println)

//对数值进行排序:从小到大排序
Array(-1,20,3,40).sorted.foreach(println)  //将以上代码简化后输出

//对字母排序:按照字典顺序
Array("zip","bus","apple","banana","card").sorted.foreach(println)

5.sortWith自定义排序

eg1:

//sortWith自定义排序
def main(args:Array[String]): Unit = {

  //对数值进行排序:在坐标系上对距离0点的距离大小进行排序
  //sortWith( (x,y) => 布尔值)
  //  true: x 应该要排在y的前面
  //  false: x要排在y的后面
  Array(-1,2,0,4,9).sortWith((x,y)=> Math.abs(x - 0) < Math.abs(y-0) ).foreach(println)

eg

def main(args:Array[String]): Unit = {

  //对数值进行排序:在坐标系上对距离0点的距离大小进行排序
  //sortWith( (x,y) => 布尔值)
  //  true: x 应该要排在y的前面
  //  false: x要排在y的后面
  //Array(-1,2,0,4,9).sortWith((x,y)=> Math.abs(x - 0) < Math.abs(y-0) ).foreach(println)

  //Array(-1,2,0,4,9).sorted.foreach(println)//从小到大排序
  //任务:从大到小排序?
  Array(-1,2,0,4,9).sortWith((x,y)=> x > y).foreach(println)