【发布时间】:2021-08-18 02:00:51
【问题描述】:
如果我跑:
List(1, 4, 3, 9).reduce {(a, b) => println(s"$a + $b"); a + b}
结果是:
1 + 4
5 + 3
8 + 9
但是,如果我使用reduceLeft 而不是reduce,它也会打印:
1 + 4
5 + 3
8 + 9
我认为reduce 以这种方式减少了值的序列:
(1+4) + (3+9)
(5) + (12)
(17)
reduceLeft 和 reduce 之间的真正区别是什么?
【问题讨论】:
-
“我认为reduce会以这种方式减少值的序列:” ham no.
reduce的大多数实现只是回退到reduceLeft但它们可能会回退到reduceRight-reduce只是不能保证操作的完成顺序,如果你不关心顺序使用reduce因为基础集合将选择最有效的顺序,如果您需要从左到右或从右到左选择其他顺序之一;区别更多的是语义而不是实际的实现细节。如果您想要始终并行搜索的内容,请搜索aggregate
标签: scala collections