今天我们来学习Scala中的reduceRight和reduceLefft如何使用,
package UerFuntion01
object Array02 {
def main(args: Array[String]): Unit = {
//1、折叠,化简:将二元函数引用于集合中的函数
val list = List(2,3,5,6)
val left1 = list.reduceLeft(_ - _)
val left2 = list.reduceLeft((x,y) => x - y)//等价
println("left1:" + left1)//结果为:-12
println("left2:" + left2)//结果为:-12
val right1 = list.reduceRight((x,y) => x - y)
val right2 = list.reduceRight(_ - _)//等价
println("rigth1:" + right1)//结果为:-2
println("rigth2:" + right2)//结果为:-2
//2、折叠,化简:fold
val list2 = List(1,3,6,9)
val list2_fold1 = list2.fold(2)((x,y) => x + y )
val list2_fold2 = list2.fold(2)(_ + _)
println("list2_fold1:" + list2_fold1)//结果为:21
println("list2_fold2:" + list2_fold2)//结果为:21
//2.1、foldLeft和foldRight有一种缩写方法对应分别是:/:和:\
val list3 = List(3,6,9)
val list2_fold3 = (1 /:list3)(_ - _)
val list2_fold4 = (1 /:list3)((x,y) => x - y )
println("list2_fold3:" + list2_fold3)//结果为;-17
println("list2_fold4:" + list2_fold4)//结果为;-17
}
}
reduceLefft(_ - _)这个函数的执行逻辑如下图所示:
.reduceRight(_ - _)反之同理
fold函数将上一步返回的值作为函数的第一个参数继续传递参与运算,直到list中的所有元素被遍历。
注意:折叠,化简,扫描这个理解需要结合上面的知识点,扫描,即对某个集合的所有元素做fold操作,但是会把产生的所有中间结果放置于一个集合中保存。
输出结果如下: