web-dev-qa-db-ja.com

ダーツフォールドvsリデュース

Dartのfoldreduceの違いは何ですか?また、どちらを使用するのか、もう一方を使用するのはいつですか?ドキュメントによると、彼らは同じことをしているようです。

提供された関数を使用して、コレクションの各要素を既存の値と繰り返し結合することにより、コレクションを単一の値に減らします。

29
basheps

reduce は、コレクションに含まれている型と同じ型を返す関数を持つ空でないコレクションでのみ使用できます。

fold すべての場合に使用できます。

たとえば、reduceを使用してリスト内のすべての文字列の長さの合計を計算することはできません。 foldを使用する必要があります:

_final list = ['a', 'bb', 'ccc'];
// compute the sum of all length
list.fold(0, (t, e) => t + e.length); // result is 6
_

ちなみに、list.reduce(f)list.skip(1).fold(list.first, f)のショートカットと見なすことができます。

24