当前位置:网站首页>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)
}
}
边栏推荐
猜你喜欢

基于SSM开发的的小区物业管理系统小程序源码

数仓4.0(二)------ 业务数据采集平台

热部署系统实现

HCIP练习02(OSPF)

Transformer、BERT、GPT 论文精读笔记

mysql5.7服务器The innodb_system data file 'ibdata1' must be writable导致无法启动服务器

sqlite date field plus one day

110道 MySQL面试题及答案 (持续更新)

【愚公系列】2022年07月 Go教学课程 026-结构体

FusionAccess软件架构、FusionAccess必须配置的四个组件、桌面发放流程、虚拟机组类型、桌面组类型
随机推荐
关于Unity,Laya学习,第一步加载Unity加载场景
Gauva的ListenableFuture
AcWing 3391. 今年的第几天?(简单题)
用diskpart的offline命令弹出顽固硬盘
【Kaggle实战】泰坦尼克号生存人数预测(从零到提交到Kaggle再到模型的保存与恢复)
【愚公系列】2022年07月 Go教学课程 026-结构体
BOM系列之localStorage
ceph简介
线程介绍与使用
ArcEngine (2) loading the map document
tolower函数
sqlite date field plus one day
uniapp swiper 卡片轮播 修改指示点样式效果demo(整理)
ArcEngine(一)加载矢量数据
箭头函数与普通函数的区别
集群
MySQL or使索引失效
The Transformer, BERT, GPT paper intensive reading notes
qt使用mysql数据库(自学笔记)
JMeter接口自动化发包与示例