gpt4 book ai didi

scala - 缩小和折叠之间的区别

转载 作者:行者123 更新时间:2023-12-04 01:27:48 26 4
gpt4 key购买 nike

阅读有关Scala http://josephmoniz.github.io/blog/2013/04/04/scala-reduce-vs-fold/中的reduce vs fold的文章时,它会指出“您正在获取N的某个值,并对它执行聚合操作,使得最终结果通常为<=N。”

但是,由于对N个值求和会产生> = N的值,因此该语句是否错误?

更新:我认为<=在这种情况下表示相同类型或子类型

最佳答案

我认为这是一个有缺陷的表征。最好这样考虑折叠:

In:
initial value
way to combine stuff with initial value
collection
Out:
combined stuff


而reduce是这样的:

In:
way to combine stuff
collection
Out:
combined stuff


也就是说,区别在于您是否拥有一个初始值(它甚至可能与集合中的类型不一样!),就像折叠一样,还是只是折叠已经拥有的值,如减少做。

如果您有一个自然零,即可以在不更改其合并对象的情况下进行合并,则可以将reduce实施为从零开始的折叠。例如,对于乘法,零是 1(因为 1*x == x),所以

List(1,2,3).fold(1){_ * _}
List(1,2,3).reduce{_ * _}


给出相同的答案。 (但是,只有第一个在空列表上给出答案!)

要查看有关如何完全折叠的示例,请考虑使用此示例(此处带有foldLeft,以便我们知道将初始值传递到操作的左侧)

List(1,2,3).foldLeft(List(0))((ns,n) => ns ++ List.fill(n+1)(n))


给出 List(0, 1, 1, 2, 2, 2, 3, 3, 3, 3)

关于scala - 缩小和折叠之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25149359/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com