😶‍🌫️高阶函数

67 阅读4分钟

002D3DD9.jpg

😺高阶函数

定义:高阶函数是是一种特殊的函数,特殊之处在于:它指使用其他函数作为参数或者返回值。

object Base54 {
  /**
   * 数组
   * 1.把数组中每个元素都变成之前的两倍,并把结果保持在一个新数组中
   * 
   */
  
  def main(args: Array[String]): Unit = {
    val arr = Array(1,2,3,4,5)
    
    val fn = (x:Int)=>x*2//fn是一个字面里的函数
    
    val arr1 =arr.map( fn )//map是一个高阶函数,因为他的参数类型是函数!
    
    //用for循环输出
    for(i<-arr1){
      println(i)
    }
  }

}

006BD23B.gif

😸map函数

没有必要去定义一个函数fn,直接写在map函数里面,此时,他就是一个匿名函数

object Base54 {
  /**
   * 数组
   * 1.把数组中每个元素都变成之前的两倍,并把结果保持在一个新数组中
   *
   */

  def main(args: Array[String]): Unit = {
    val arr = Array(1,2,3,4,5)

    //val fn = (x:Int)=>x*2//fn是一个字面里的函数

    //val arr1 =arr.map( fn )//map是一个高阶函数,因为他的参数类型是函数!

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

    //用for循环输出
    for(i<-arr1){
      println(i)
    }
  }

}

006BD23B.gif

eg:如何把(-1,2,-3,4,-5)改成(1,2,3,4,5)代码❔

object Base54 {
  def main(args: Array[String]): Unit = {
    val arr = Array(-1,2,-3,4,-5)

    //val fn = (x:Int)=>x*2//fn是一个字面里的函数

    //val arr1 =arr.map( fn )//map是一个高阶函数,因为他的参数类型是函数!

    //没有必要去定义一个函数fn,这里直接写在map函数里面,此时,他就是一个匿名函数
    val arr1 =arr.map(x=>if (x>0)x else -x)

    //用for循环输出
    for(i<-arr1){
      println(i)
    }
  }

}

006BD23B.gif

😽foreach函数

foreach:依次使用当前的函数来处理数组中的每一个元素

object Base55 {
  /**
   * 数组
   * 1.把数组中每个元素都打印出来
   * foreach:依次使用当前的函数来处理数组中的每一个元素
   *
   */
  def main(args: Array[String]): Unit = {
    val arr = Array(-1,2,-3,4,-5)
    arr.foreach(x=>{println(x)})
    arr.foreach(println)
    }
}

😻filter函数

1.把数组中的偶数保留下来,组成新的数组

  1. filter(函数fn),如果fn的返回值是true,就保留这个元素
object Base56 {

  def main(args: Array[String]): Unit = {
    val arr = Array(-1,2,-3,4,-5)
    val arr1 =  arr.filter(x=>x%2==0)
    arr1.foreach(println)
    }
}

006BD23B.gif

eg:去掉不及格的函数(60,59,80,70)❔

object Base56 {
  def main(args: Array[String]): Unit = {
    var arr =Array(60,59,80,70).filter(x=>x>=60)
    arr.foreach(println)
    }
}

006BD23B.gif

eg:将(1,2,3)(4,5,6)改成(1,2,3,4,5,6)❔

object Base56 {
  def main(args: Array[String]): Unit = {
    var arr1 =Array(Array(1,2,3),Array(4,5,6);
    println(arr1(0)(0))
    val arr2=arr1.flatten
    arr2.foreach(println)
    }
}

006BD23B.gif

😹redce函数

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

object Base57 {
  /**
   * reduce:聚合
   */
  def main(args: Array[String]): Unit = {
    var arr =Array(1,2,3,4,5)
    val  sum =arr.reduce((x,y)=>x+y)
   println(sum)
    }
}

006BD23B.gif

eg:求最大值和最小值❔

object Base58 {
  /**
   * reduce:聚合
   */
  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)

    }
}

006BD23B.gif

😿fold函数

fold 是一种集合操作(与reduce类似),用于对集合中的元素进行聚合操作,返回一个单一的结果,需要提供一个初始的“种子”值。

object Base59 {
  /**
   * 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)
    }
}

006BD23B.gif

sorted函数

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

object Base60 {
  /**
   * fold:带初值的reduce
   */
  def main(args: Array[String]): Unit = {
    var arr =Array(-1,20,3,2,50)
    //求最大值
    val  arr1=arr.sorted
    
    val  arr2=Array("banana","zip","b","a","apple")
    
    val  arr3=arr2.sorted
    
    arr3.foreach(println)
    }
}

006BD23B.gif

sortedWith函数

排序函数:(元素a,元素b)=>Bool,如果返回true,则表示元素a应排在元素b之前

object Base62 {
  /**
   * sortWith
   * 自定义排序规则
   */
  def main(args: Array[String]): Unit = {
    var arr =Array(-1,0,3,2,1)
    //对arr中所有元素按照他们距离3的距离的大小从小到大排序
    var arr1 = arr.sortWith((a, b) => Math.abs(a - 3) < Math.abs(b - 3))

    arr1.foreach(println)
    }
}

006BD23B.gif

![00CDB418.jpg](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/50c27966df514b478290635f594e5932~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg6Iif5pyo5pyo5a2Q:q75.awebp?rk3s=f64ab15b&x-expires=1771988814&x-signature=nOfXgm2EuBJG63xM%2FVu8IjudoXU%3D)