主要内容:
1. reduce函数;
2. fold函数;
3. sorted函数;
4. sortedWith函数;
(一)reduce
[讲] 作用:reduce 是一种集合操作,用于对集合中的元素进行聚合操作,返回一个单一的结果。它通过指定的二元操作(即取两个元素进行操作)对集合中的所有元素进行递归处理,并最终将其合并为一个值。
语法:reduce 函数需要一个函数作为参数,这个函数接受两个相同类型的参数,并返回一个值。
代码如下:
object base048 {
def main(args: Array[String]): Unit = {
val arr= Array(1,2,3,4,5)
// 求数组元素的累加
val rst = arr.reduce( (x,y) => x+y)
// val rst=arr.sum
println(s"rst = ${rst}")
}
}
结果如下:
(二)reduceLeft-reduceRight
[讲] reduceLeft是从集合的左侧开始聚合,与reduce等价; reduceRight是从集合的右边开始。
计算最大值与最小值
object base049 {
// reduce ==== reduceLeft 从左往右计算
// reduceRight 以右往左计算
def main(args: Array[String]): Unit = {
val arr= Array(1,2,3)
val rst = arr.reduceLeft( (x,y) => x-y)
val rst1 = Array(1,2,3,4).reduceRight((x,y)=> x-y)
println(s"rst = ${rst}")
println(s"rest1= ${rst1}")
}
}
结果如下:
var max = numbers.reduce((a,b)=> if(a>b) a else b)
println(max)
[学生练习] 计算最小值****
第 二 课时
(三)fold
[讲] 作用:fold 是一种集合操作(与reduce类似),用于对集合中的元素进行聚合操作,返回一个单一的结果,需要提供一个初始的“种子”值。
[讲]语法:数组.fold(初值)(函数)
计算带初值的累积
代码如下:
object base050 {
// fold:带初值的reduce
def main(args: Array[String]): Unit = {
val rst= Array(1,2,3).fold(10)((x,y)=> x+y)
println(s"rst = ${rst}") //16
}
}
结果如下:
(四)sorted函数
[讲] 功能:对元素进行排序。它会直接使用元素自身的自然顺序进行排序
[讲] 语法:新数组 = 原数组.sorted
求 :对数值排序,对字符元素排序(从小到大)
代码如下:
object base051 {
// sorted
def main(args: Array[String]): Unit = {
// 对数值元素排序
val arr= Array(-1,10,-2,1,2,3).sorted
arr.foreach(println)
// 对字符元素排序,字典排序
var arr2 = Array("zoom","bus","apple","banana","car").sorted
arr2.foreach(println)
}
}
结果如下:
(五)sortedWith
[问] 如何将Array(-1,0,1,3,2)中的所有元素,按它们到0点的距离排序?
[讲] 功能:按自定义规则排序
[讲] 语法:新数组 = 原数组.sortedWith(排序函数)
排序函数:(元素a,元素b)=>Bool。如果返回 true,则 表示元素a应排在元素b之前。
object base052 {
// sortWith :自定义排序
// sortWith((x,y)=>布尔值)
// (1) 如果返回值是true,那x就在y前面
// (1) 如果返回值是false,那x就在y后面
def main(args: Array[String]): Unit = {
// 对数值元素排序 :按照离 1 这个点的距离的从小到大排序
var arr= Array(-1,10,-2,1,2,3).sortWith((x,y) => Math.abs(x - 1) < Math.abs(y-1) )
arr.foreach(println)
}
}
运行结果如下: