1.高阶函数:是一种特殊的函数,特殊之处在于:它指使用其他函数作为参数或者返回值。
2.Scala的常见高阶函数包括Array.map、flatten、flatmap、foreach、reduce、filter和fold等。
(1)map函数:
作用:通过对数组的每一个元素应用一个函数来构建一个新数组。
语法: 新数组 = 旧数组.map(旧元素=>新元素)
例题:把arr中每个元素变成自己的两倍,并且返回一个新的数组
代码:
scale
体验AI代码助手
代码解读
复制代码
object basic48 {
def main(args: Array[String]): Unit = {
val arr = Array(1,2,3,4)
val fn = (x:Int) => x*2
// Array表示元祖,map是它的方法
// map是高阶函数,它的参数是一个函数
val arr1 = arr.map(fn)
for (i <- arr1){
println(i)
}
}
}
结果:
练习1:
把(1,2,3,4,5) → (1,4,9,16,25)
代码:
ini
体验AI代码助手
代码解读
复制代码
object basic48 {
def main(args: Array[String]): Unit = {
val abb = Array(1,2,3,4,5)
val abb1 =abb.map(x => x*x)
for (b <-abb1){
println(b)
}
结果:
练习2:
把(-1,2,-3,-4) → (1,2,3,4)
scss
体验AI代码助手
代码解读
复制代码
object basic48 {
def main(args: Array[String]): Unit = {
//val arr =Array(1,2,3,4)
// val arr1=arr.map(x => x*2)
// for (i <- arr1){
// println(i)
// }
//
// val abb = Array(1, 2, 3, 4, 5)
// val abb1 = abb.map(x => x * x)
// for (b <- abb1) {
// println(b)
// }
val acc =Array(-1,-2,-3,-4)
val acc1 =acc.map(x => if (x >= 0) x else -x)
for (c <- acc1){
println(c)
}
}
}
(2)foreach函数:
作用:对数组的每一个元素应用函数。
语法:数组.foreach(元素=>{})
例题:
打印数组中的元素
代码:
ini
体验AI代码助手
代码解读
复制代码
object basic49 {
def main(args: Array[String]): Unit = {
val arr =Array(-1,2,-3,-4,5)
arr.foreach(println)
}
}
结果:
(3)filter函数
作用:对数组元素使用函数进行过滤。
语法:新数组= 旧数组.filter(元素=>bool) 它的参数是一个函数,这函数的返回值是布尔值。如果返回为true就保留
例题;
在数组中找出元素是偶数的,并组成新数组。
代码:
ini
体验AI代码助手
代码解读
复制代码
object basic50 {
def main(args: Array[String]): Unit = {
val arr =Array(0,2,3,4,5)
var arr1 =arr.filter(x => x%2 ==0)
arr1.foreach(println)
}
}
结果:
练习1
去掉不及格的分数:(60,59,80,70) → (60,80,70)
代码:
ini
体验AI代码助手
代码解读
复制代码
object basic1 {
def main(args: Array[String]): Unit = {
val arr = Array(60,59,80,70)
var arr1 = arr.filter(x => x >= 60)
arr1.foreach(println)
}
}
结果:
(4)flatten函数
作用:将二维数组中的元素展平至单数组中。
语法:二维数组.flatten。不需要写()
练习:
任务:对成绩(100,51,55,67,59,89)进行处理,如果分数在56-59之间,就设置为60分,得到的新成绩为(100,51,55,67,60,89)
代码:
ini
体验AI代码助手
代码解读
复制代码
object basic51 {
def main(args: Array[String]): Unit = {
val arr = Array(100, 51, 55, 67, 59, 89)
val arr1 = arr.map(arr => if (arr >= 56 && arr <=59) 60 else arr)
arr1.foreach(println)
}
}
结果: