何时使用折叠以及何时在Scala中使用foreach列表

1 functional-programming scala

在我的理解中,当需要对列表中的每个元素应用函数时,我们使用fold函数,对吗?

如果只是迭代列表,foreach就足够了?

Jac*_*cko 6

fold

使用fold时要聚集一组为单精度值.这里我们说,从零开始并将每个连续元素添加到前一个元素,然后在集合耗尽后返回结果.

scala> List(1, 2, 3).foldLeft(0){ (a, b) => a + b }
res10: Int = 6
Run Code Online (Sandbox Code Playgroud)

请注意,fold是专为并行计算,但foldLeftfoldRight在什么类型的,他们可以应用到条件更强大.

map

使用map时要一个功能应用到每个元素的集合,并返回另一组的结果.

scala> List(1, 2, 3).map(x => x + x)
res12: List[Int] = List(2, 4, 6)
Run Code Online (Sandbox Code Playgroud)

foreach

使用foreach时,你不想返回任何东西,但需要一定的副作用,如.将每个值保存到DB.

List(1, 2, 3).foreach(x => saveToDB(x))
Run Code Online (Sandbox Code Playgroud)


Chi*_*rlo 5

在我的理解中,当需要对列表中的每个元素应用函数时,我们使用fold函数,对吗?

不.如果要获取结果是列表中所有元素的函数,请使用折叠.也就是说,您fold将列表合并为一个结果

要在列表的每个元素上应用相同的功能,主要用于打印到屏幕等副作用,您可以使用foreach名称.