高阶函数

45 阅读2分钟

高阶函数

fn是一个字面量函数
map是一个高阶函数,因为它的参数类型是函数!

object base53 {


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

    val arr = Array(1,2,3,4,5)
    
//    val fn = (x:Int) => x * 2

//    val arr1=arr.map( fn )

//    没有必要去单独定义一个函数fn,这里直接写在map函数内,此时,它就是一个匿名函数
    val arr1=arr.map( x => x*2 )

    for(i <- arr1){
      println(i)
    }
  }
}

把(1,2,3,4,5)->(1,4,9,16,25)

object base54 {

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

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

    val arr1=arr.map( x => x*x )

    for(i <- arr1){
      println(i)
    }
  }
}

把(-1,2,-3,-4)->(1,2,3,4)

object base54 {

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

    val arr = Array(-1,2,-3,-4)

    val arr1=arr.map( x => if(x>0) x else -x)


    for(i <- arr1){
      println(i)
    }
  }
}

foreach函数

object base55 {

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

    val arr = Array(-1,2,-3,-4,5)

//    arr.foreach(x => {println(x)})
    arr.foreach(println)

  }
}

把数组中的偶数保留下来,组成新的数组
filter:过滤
filter(函数fn),如果fn的返回值是true,就保留这个元素

object base56 {


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

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

//    x%2==0用来判断是否为偶数
    
    val arr1 = arr.filter(x => x%2 ==0)

    arr1.foreach(println)

  }
}

去掉不及格的分数:(60,59,80,70)->(60,80,70)

object base56 {

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

    var arr = Array(60,59,80,70).filter(x => x >=60)
    arr.foreach(println)
  }
}

(1,2,3)(4,5,6)->(1,2,3,4,5,6)

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

    var arr1 = Array(   Array(1,2,3),    Array(4,5,6));

//    arr1(0).foreach(println)
    println(arr1(0)(0))
    var arr2=arr1.flatten
    arr2.foreach(println)
    
  }

reduce:聚合

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

  var arr= Array(1,2.3,4,5);
  var sum=arr.reduce((x,y)=>x+y)

  println(sum)
}
object base59 {


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

    var arr= Array(-1,20,30,14)
    val max=arr.reduce((x, y) => if (x>y) x else y)

    println(max)

    val min=arr.reduce((x, y) => if (x<y) x else y)
    println(min)
  }
}

fold:带初值的reduce

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

  var arr= Array(1,2,3)
  val sum1=arr.fold(100)((x, y) => x+y)
  println(sum1)
}

sorted函数

功能:对元素进行排序。它会直接使用元素自身的自然顺序进行排序

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

  var arr= Array(-1,20,3,2,50)
  var arr1=arr.sorted
  var arr2=Array("banana","zip","b","a","apple")
  var arr3=arr2.sorted
  arr3.foreach(println)
}

sortedWith

如何将Array(-1,0,1,3,2)中的所有元素,接它们到0点的距离排序

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

    var arr= Array(-1,0,3,2)
    
//    排序函数:(元素a,元素b)=>Bool。如果返回true,则表示元素a应该排在元素b之前。
//    对arr中所有元素按照他们距离3的距离的大小从小到大排序
    var arr1=arr.sortWith((a,b)=>Math.abs(a-3)<Math.abs(b-3))
  }