【发布时间】:2016-12-01 23:19:50
【问题描述】:
在我的理解中,当列表中的每个元素都需要应用函数时,我们使用折叠函数,对吗?
如果只是迭代列表,foreach就够了吗?
【问题讨论】:
标签: scala functional-programming
在我的理解中,当列表中的每个元素都需要应用函数时,我们使用折叠函数,对吗?
如果只是迭代列表,foreach就够了吗?
【问题讨论】:
标签: scala functional-programming
fold
当您希望将集合聚合为单个值时,请使用 fold。这里我们说,从零开始,将每个连续元素添加到前一个元素,然后在集合耗尽后返回结果。
scala> List(1, 2, 3).foldLeft(0){ (a, b) => a + b }
res10: Int = 6
请注意,fold 专为并行计算而设计,但 foldLeft 和 foldRight 在可应用于哪些类型方面更强大。
map
当您想将函数应用于集合中的每个元素并返回另一个集合和结果时,请使用 map。
scala> List(1, 2, 3).map(x => x + x)
res12: List[Int] = List(2, 4, 6)
foreach
当您不想返回任何东西但需要一些副作用时,请使用foreach。将每个值保存到数据库中。
List(1, 2, 3).foreach(x => saveToDB(x))
【讨论】:
在我的理解中,当列表中的每个元素都需要应用函数时,我们使用折叠函数,对吗?
不。当您想要获得一个结果是列表中 所有 元素的函数时,您可以使用 fold。也就是你把fold列表变成一个结果
要对列表的每个元素应用相同的功能,主要是为了打印到屏幕等副作用,您使用foreach,因此得名。
【讨论】:
如果你想减少你正在使用折叠的列表
List(1,2,3,4).fold(0){_+_} <<-- gives you sum of elements in list
Foreach 用于迭代列表,例如打印所有元素
List(1,2,3,4).foreach(println)
【讨论】:
foreach 通常是错误的方式,map 在大多数情况下是你想要的。
foreach 通常是错误的方式,但我看到使用foreach 编写手册map 的人与使用foreach 编写手册的人一样多@ 987654329@
map 做foreach 的分享