当前位置:网站首页>scala reduce、reduceLeft 、reduceRight 、fold、foldLeft 、foldRight
scala reduce、reduceLeft 、reduceRight 、fold、foldLeft 、foldRight
2022-08-03 08:30:00 【但行益事莫问前程】
1. 归约函数
1.1 reduce
聚合: N -> 1
,如 sum函数统计List中所有元素的和; 在scala底层采用两两聚合,聚合结果的类型与reduce方法的返回值类型相同
object T27 {
def main(args: Array[String]): Unit = {
val dataList = List(1, 2, 3, 4,5)
val i = dataList.reduce(_ - _)
println(i)
}
}
1.2 reduceLeft
从左往右
,对集合中的元素执行算子
object T28 {
def main(args: Array[String]): Unit = {
val dataList = List(1, 2, 3, 4,5)
val i = dataList.reduceLeft(_ - _)
println(i)
}
}
注:运算逻辑为( ( ( (1 - 2) - 3) - 4) - 5)
,即 op( op( ... op(x_1, x_2) ..., x_{n-1}), x_n)
1.3 reduceRight
从右往左
,对集合中的元素执行算子
object T29 {
def main(args: Array[String]): Unit = {
val dataList = List(1, 2, 3, 4, 5)
val i = dataList.reduceRight(_ - _)
println(i)
}
}
注:运算逻辑为(1 - (2 - (3 - (4 - 5) ) ) )
,即 op(x_1, op(x_2, ..., op(x_{n-1}, x_n)...))
2. fold、foldLeft 、foldRight
fold函数的本质是用初始值和集合内的每一条数据进行聚合
;fold方法实际是函数柯里化
,有2个参数,第一个参数表示初始值
,第二个参数表示计算规则
。fold方法有两个变体:foldLeft()和foldRight()
:foldLeft(),第一个参数为累计值
,集合遍历的方向是从左到右
;foldRight(),第二个参数为累计值
,集合遍历的方向是从右到左
如:合并2个map并key相同的求和
object T30 {
def main(args: Array[String]): Unit = {
val map1 = mutable.Map("a" -> 1, "b" -> 1, "c" -> 3)
val map2 = mutable.Map("a" -> 1, "d" -> 1, "c" -> 3)
map1.foldLeft(map2)((map, element) => {
val k = element._1
val v = element._2
val newV = map.getOrElse(k, 0) + v
map.update(k, newV)
map
})
println(map2)
}
}
边栏推荐
猜你喜欢
随机推荐
第十二天&接口和协议
2022下半年软考「高项&集成」复习计划ta来喽~
IDEA的database使用教程(使用mysql数据库)
HCIA实验(07)
牛客 - 最佳直播时间 (差分)
WordPress主题-B2美化通用子主题商业运营版
MySQL1
word之个人设置
36氪详情页AES
redis键值出现 xacxedx00x05tx00&的解决方法
手把手教你如何自制目标检测框架(从理论到实现)
Charles抓包工具学习记录
Add Modulo 10 (规律循环节,代码实现细节)
并发之ReentrantLock
Evaluate: A detailed introduction to the introduction of huggingface evaluation indicator module
Using pipreqs export requirements needed for the project. TXT (rather than the whole environment)
MySQL2
"Swordsman Offer" brush questions print from 1 to the largest n digits
HCIP练习02(OSPF)
Arduino框架下对ESP32 NVS非易失性存储解读以及应用示例