1. ホーム
  2. kotlin

[解決済み] Kotlinのfoldとreduceの違い、いつどちらを使うか?

2022-04-24 20:21:57

質問

私は両方の関数でかなり混乱しています fold()reduce() をKotlinで使う場合、両者を区別する具体例をどなたか教えていただけませんか?

どのように解決するのですか?

fold は初期値をとり、最初に渡すラムダはその初期値とコレクションの最初の要素をパラメータとして受け取ります。

例えば、整数のリストの和を計算する次のようなコードを考えてみよう。

listOf(1, 2, 3).fold(0) { sum, element -> sum + element }

ラムダを最初に呼び出すときは、パラメータ 01 .

初期値を渡す機能があると、何らかのデフォルト値やパラメータを操作に提供する必要がある場合に便利です。例えば、リスト内の最大値を探していて、何らかの理由で少なくとも10を返したい場合、次のようにします。

listOf(1, 6, 4).fold(10) { max, element ->
    if (element > max) element else max
}


reduce は初期値を取らず、コレクションの最初の要素をアキュムレータとして開始します(これを sum を使用します。)

例えば、また整数の和をやってみましょう。

listOf(1, 2, 3).reduce { sum, element -> sum + element }

ここで最初にラムダを呼び出すときは、パラメータを指定します。 12 .

を使用することができます。 reduce は、適用するコレクション内の値以外には依存しない操作の場合です。