Rubyにて、配列で使うinjectメソッドがなかなか理解できなかったので、自分なりに整理してメモとして残します。
なにぶん初心者ですので、理解が誤っている場合等はご指摘いただければ幸いです。
###通常の記法
test.rb
array = [1, 2, 3, 4].inject(0) {|result, item| result + item }
# => 10
このように記述したとき、次のような順番で処理が行われる。
-
inject
の引数「0」を初期値としてresult
に代入 -
array
の要素「1」をitem
に代入 -
result + item
の結果をresult
に代入 -
array
の要素「2」をitem
に代入
...以降繰り返し
###引数「0」を省略した記法
test.rb
array = [1, 2, 3, 4].inject {|result, item| result + item }
# => 10
-
array
の要素「1」を初期値としてresult
に代入 -
array
の要素「2」をitem
に代入 -
result + item
の結果をresult
に代入 -
array
の要素「3」をitem
に代入
...以降繰り返し
引数が省略された場合は、配列の1番目の要素が初期値となり、2番目の要素からループが始まる。
###さらに省略した記法
test.rb
array = [1, 2, 3, 4].inject(:+)
# => 10
省略されすぎて何がなんだかわかりにくいが、:+
のように演算子を渡すと、ひとつ上の記法と同じ意味になる。
inject(:+)
では配列の要素の和を返し、inject(:*)
では配列の要素の積を返すことができる。