Dart中fold和reduce之间的区别是什么?我何时使用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).
它们之间有一些明显的差异。除了上面提到的之外,值得强调的是fold()能够对空集合进行操作而不会产生错误。
reduce()会抛出一个错误,说Bad state: No elementwhilefold()将返回一个非空值,使用传递给它的初始值作为后备返回值。
我在这里详细讨论了这个问题:
https://medium.com/@darsshanNair/demystifying-fold-in-dart-faacb3bd4efd
| 归档时间: |
|
| 查看次数: |
5912 次 |
| 最近记录: |