高阶函数(1)

53 阅读3分钟

(一)什么是 高阶函数

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

Scala的常见高阶函数包括Array.map、flatten、flatmap、foreach、reduce、filter和fold等。

(二)map 函数

任务:把数组(1,2,3,4,5) → (2,4,6,8,10)

[讲] 作用:通过对数组的每一个元素应用一个函数来构建一个新数组。

[讲] 语法: 新数组 = 旧数组.map(旧元素=>新元素)


object l35 {
  def main(args: Array[String]): Unit = {
    // 定义一个数组
    val arr=Array(1,2,3,4)
    // 提问:把arr中每个元素都变成自己的2倍,并返回一个新数组?
    val fn=(x:Int) => x*2
    // Array表示数组,map就是它的方法。
    // map 就是一个高阶函数,它的参数是一个函数!

    var arr1=arr.map(fn)

    for (i <- arr1){

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

  }


}

[练] :把(1,2,3,4,5) → (1,4,9,16,25)


object l36 {
  def main(args: Array[String]): Unit = {
    val original = Array(1, 2, 3, 4, 5)
    // 定义"求平方"的匿名函数,作为map的参数
    val squared = original.map(x => x * x)
    // 输出结果:(1,4,9,16,25)
    println(squared.mkString("(", ", ", ")"))
    }

}

[练] :把(-1,2,-3,-4) → (1,2,3,4)


object l37 {
  def main(args: Array[String]): Unit = {
    val arr = Array(-1, 2, -3, -4)
    // 定义"求绝对值"的匿名函数,作为map的参数
    val arr1 = arr.map(x => if (x < 0) -x else x)
    // 输出结果:(1,2,3,4)
    println(arr1.mkString("(", ", ", ")"))
    }

}


(三)foreach函数

任务: 打印数组中的元素

[讲] 作用:对数组的每一个元素应用函数。

[讲] 语法:数组.foreach(元素=>{})


object basic50 {
  def main(args: Array[String]): Unit = {
    // 定义一个数组
    val arr = Array(-1, 2, -3, -4, 5)

    // arr.foreach(x => {
    //   print(x)
    // })
    // 依次打印每个元素
    arr.foreach(println)

    // 依次打印每个元素
    // for(i <- arr){
    //   println(i)
    // }
  }
}

课时

(四)filter函数

任务:在数组中找出元素是偶数的,并组成新数组。(1,2,3,4,5) → (2,4)

[讲] 作用:对数组元素使用函数进行过滤。

[讲] 语法:新数组= 旧数组.filter(元素=>bool)  它的参数是一个函数,这函数的返回值是布尔值。如果返回为true就保留。


object l36 {
  def main(args: Array[String]): Unit = {
    val original = Array(1, 2, 3, 4, 5)
    // 定义"求平方"的匿名函数,作为map的参数
    val squared = original.map(x => x * x)
    // 输出结果:(1,4,9,16,25)
    println(squared.mkString("(", ", ", ")"))
    }

}

任务:在数组中找出元素是偶数的,并组成新数组。(1,2,3,4,5) → (2,4)

[讲] 作用:对数组元素使用函数进行过滤。

[讲] 语法:新数组= 旧数组.filter(元素=>bool)  它的参数是一个函数,这函数的返回值是布尔值。如果返回为true就保留。

[码]

val arr1 = Array(1,2,3,4,5,6)
val arr3 = arr1.filter(x=> x%2  == 0)
arr3.foreach(println)

[练] :去掉不及格的分数:(60,59,80,70) → (60,80,70)


object l38 {


    def main(args: Array[String]): Unit = {
      val scores = Array(100, 51, 55, 67, 59, 89)
      val newScores = scores.map(score => if (score >= 56 && score <= 59) 60 else score)
      newScores.foreach(println)
    }
  }

五、课堂小结

通过本堂课的学习,我们学习了四个高阶函数。下面我们一起回顾下本课的主要内容。[问]

1. 什么是高阶函数?

2. map的作用是?

3. foreach的作用是?

4. filter的作用是?

5. flatten的作用是?

六、实训内容

任务:对成绩(100,51,55,67,59,89)进行处理,如果分数在56-59之间,就设置为60分,得到的新成绩为(100,51,55,67,60,89)

高阶函数(1)

1.高阶函数的定义

2.map函数

3.foreach函数

4.filter函数

5.flatern函数