1. ホーム
  2. ruby

[解決済み] インジェクト法の簡単な解説が必要

2022-03-06 20:26:53

質問

[1, 2, 3, 4].inject(0) { |result, element| result + element } # => 10

このコードを見ているのですが、私の脳みそでは、10という数字がどうして結果になるのかが認識できていないのです。どなたか説明していただけませんか?

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

ブロックの最初の引数はアキュムレータと考えることができます。ブロックの各実行の結果はアキュムレータに格納され、ブロックの次の実行に渡されます。このブロックの各実行結果はアキュムレータに格納され、次のブロックの実行に渡されます。次のブロック呼び出しでは、この新しい値を取得し、それを加算して再び格納し、これを繰り返します。

この場合、配列のすべての値の合計、つまり10が返されます。

もうひとつ、文字列表現をキーとするオブジェクトの配列からハッシュを作成する簡単な例を紹介します。

[1,"a",Object.new,:hi].inject({}) do |hash, item|
  hash[item.to_s] = item
  hash
end

この場合、アキュムレータをデフォルトで空のハッシュにし、ブロックが実行されるたびにそれに値を入れています。ブロックの結果はアキュムレータに戻されるため、ブロックの最後の行としてハッシュを返さなければならないことに注意してください。