1.高阶函数的定义:使用其他函数作为参数或者返回一个函数作为结果的函数。
2.map和foreach函数的应用
①.map:返回值构建一个新的数组通过应用函数遍历数组中的每一个元素。
语法:def map[B] (f: (T)=>B) (implicit ct:ClassTag[B]):Array[B]
②.foreach:在每个元素上执行指定的程序。
语法:def foreach[U] (f:(T)=>U):Unit
③.两者差别之处:foreach没有返回值,map有返回值。
3.map应用的实例如下:
def main(args: Array[String]): Unit = {
//学习一些常见的高阶函数(与数组,列表相关的)的用法
//Array:数组
var arr=Array(1,2,3,4,5)
//arr就是一个数组
//(1)map
//作用:通过对数组的每一个元素应用一个函数来构建一个新数组
//格式:新数组= arr.map(函数,接收一个元素,返回一个值)
val fn =(x:Int) => 2*x //字面量格式定义函数
var arr1=arr.map(fn) // map是一个高阶函数,因为它的参数是一个函数
var arr1=arr.map((x:Int) => 2*x)//map是一个高阶函数,因为它的参数是一个函数
for (i <- arr) {
println(i)
}
//把(1,2,3,4,5)->(1,4,9,16,25)
var arr1 =arr.map((x:Int) =>x*x)
for (i <- arr1) {
println(i)
}
//把(-1,2,-3,-4)->(1,2,3,4)
var arr1=Array(-1,2,-3,-4)
var arr2=arr1.map((y:Int) => if (y>0) y else -1*y)
for (i <- arr2) {
println(i)
}
4.foreach应用的实例如下:
//foreach没有返回值
//foreach的作用,对数组的的每一个元素都执行一次函数,没有返回值
var fn=(x:Int) =>{
println(x)
}
var arr1=arr.foreach(fn)
//println:就是一个函数
var arr=Array(-1,2,-3,-4)
arr.foreach(println)
5.filter函数的应用
语法:def filter (p:(T)=>Boolean): Array[T]
作用:过滤数组中的元素。
filter函数的实例如下:
var arr=Array(60,59,80,70)
//任务,去掉不及格的数
var arr1 =arr.filter((x:Int)=>x>=60)
arr1.foreach(println)
6.flatten函数的应用
作用:将二维函数组中的元素展平至单数组中。
语法:def flatten [B] (implicit asIterable: (T) => collection.IterableOnce[B] , m: ClassTag[B] :Array[B])
flatten函数应用的实例如下:
//flatten展平
var arr=Array(
Array(60,90,99),
Array(61,91,99),
Array(62,92,99),
Array(63,93,99),
)//4个人,每个人都有3门课的成绩
var arr1=arr.flatten
println(arr1.sum)