Dart Fold vs Reduce

bas*_*eps 23 dart

Dart中foldreduce之间的区别是什么?我何时使用one而不是另一个?根据文档,他们似乎做同样的事情.

通过使用提供的函数迭代地将集合的每个元素与现有值组合,将集合缩减为单个值.

Ale*_*uin 29

reduce只能用于非空集合,其函数返回与集合中包含的类型相同的类型.

折叠可以在所有情况下使用.

例如,您无法计算列表中所有字符串长度的总和reduce.你必须使用fold:

final list = ['a', 'bb', 'ccc'];
// compute the sum of all length
list.fold(0, (t, e) => t + e.length); // result is 6
Run Code Online (Sandbox Code Playgroud)

顺便说一下list.reduce(f)可以看作是捷径list.skip(1).fold(list.first, f).


Tys*_*son 7

它们之间有一些明显的差异。除了上面提到的之外,值得强调的是fold()能够对空集合进行操作而不会产生错误。

reduce()会抛出一个错误,说Bad state: No elementwhilefold()将返回一个非空值,使用传递给它的初始值作为后备返回值。

我在这里详细讨论了这个问题:

https://medium.com/@darsshanNair/demystifying-fold-in-dart-faacb3bd4efd