(一.)什么是高阶函数: 高阶函数:是一种特殊的函数,特殊之处在于:它指使用其他函数作为参数或者返回值。 Scala的常见高阶函数包括Array.map、flatten、flatmap、foreach、reduce、filter和fold等。 (二.)map函数
object t52 {
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)
//[练]:1.把(1,2,3,4,5) ——>(1,4,9,16,25)
//val arr1 = arr.map(x => x * x)
//[练]:2.把(-1,-2,-3,-4,-5) ——>(1,,2,3,4,5)
//val arr1 = arr.map(x => if(x>0) x else -x)
//用for循环输出
for(i <- arr1){
println(i)
}
}
}
(三.)foreach函数 打印数组中的元素
object t53 {
/**
* 数组
* 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函数: 在数组中找出元素是偶数的,并组成新数组。
object t54 {
/**
* 数组
* 1.把数组中的偶数保持下来,组成新数组
*filter:过滤
* filter(),如果fn 的返回值是true,就保留这个元素
*
*/
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)
//打印新数组
//[练]:把(60,59,80,70)——>(60,80,70)
//var arr = Array(60,59,80,70).filter(x => x >=60)
//arr.foreach(println)
arr.foreach(println)
}
}
(五.)flatten函数
object t55 {
/**
*二维数组
*flatten 不要加()的函数
*/
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))
val arr2 = arr1.flatten
arr2.foreach(println)
}
}
高阶函数(2): (一).reduce: 是一种集合操作,用于对集合中的元素进行聚合操作,返回一个单一的结果。
object t57 {
/**
*reduce:聚合。
*/
def main(args: Array[String]): Unit = {
var arr = Array (1,2,3,5)
var sum = arr.reduce((x,y) => x + y)
//var s = arr.sum
println(sum)
}
}
(二.)reduceLeft-reduceRight
object t58 {
/**
*reduce:聚合。
*/
def main(args: Array[String]): Unit = {
var arr = Array (-1,20,30,15)
//求最大值
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
object t59 {
/**
*fold:带初值的reduce
*/
def main(args: Array[String]): Unit = {
var arr = Array (1,2,3)
//求和
//val sum = arr.reduce((x,y) => x+y)
val sum1 = arr.fold(100)((x,y) => x+y)// 106
println(sum1)
}
}
(四)stored函数
object t60 {
/**
*stored:带初值的reduce
*/
def main(args: Array[String]): Unit = {
var arr = Array(-1,20,2,50)
//降序
var arr1 = arr.stored//对于数组类型的数据,从小到大升序排列
var arr2 = Array("banana","zip","b","a","apple")
//降序
var arr3 = arr2.sorted//对于字符类型数据,按照字母表的顺序排
arr3.foreach(println)
}
}
(五.)sorted函数: 如何将Array(-1,0,1,3,2)中的所有元素,按它们到0点的距离排序?
object t61 {
/**
*sortWith
* 自定义排序规则
*/
def main(args: Array[String]): Unit = {
var arr = Array(-1,8,2,1,3)
//排序函数:(元素a,元素b)=>Bool。如果返回true,则表示元素a应排在元素b之前。
//var arr1 = arr.sortWith((a,b)=> a到0的距离<b到0的距离)
//对arr中所有元素按照他们距离3 的距离的大小从小到大排序
var arr1 = arr.sortWith( (a,b)=> Math,abs(a-3)<Math,abs(b-3))
arr1.foreach(println)
}
}