Rubyのinjectとは

Rubyのinjectとは

injectメソッドは、RubyのEnumerableモジュールで提供されており、要素の集合に対して畳み込み操作を行うためのメソッドです。
injectはreduceとも呼ばれ、コレクション内の全ての要素を順番に処理し、1つの結果にまとめることができます。

基本的な使い方は次の通りです:

# 配列の要素の合計を計算する例
numbers = [1, 2, 3, 4, 5]
sum = numbers.inject(0) { |accumulator, number| accumulator + number }
puts sum # => 15

この例では、injectメソッドに初期値0を渡し、ブロック内でaccumulator(累積値)とnumber(現在の要素)を加算しています。
injectメソッドは各要素に対してブロックを適用し、最終的な結果を返します。

もう少し複雑な例

文字列の配列を結合して1つの文字列にする例です:

words = ["Hello", "world", "from", "Ruby"]
sentence = words.inject("") { |accumulator, word| accumulator + word + " " }.strip
puts sentence # => "Hello world from Ruby"

ここでは、injectメソッドを使用して各単語を累積しながら1つの文字列に結合しています。
最後にstripを使って末尾の空白を削除しています。

injectの引数

injectメソッドは、引数として初期値を受け取ることができますが、初期値を指定しない場合はコレクションの最初の要素が初期値として使用されます。

# 初期値なしでの使用例
product = [1, 2, 3, 4, 5].inject { |accumulator, number| accumulator * number }
puts product # => 120

この場合、初期値が指定されていないため、配列の最初の要素1が初期値として使われ、残りの要素2, 3, 4, 5に対して積を計算しています。

injectは非常に強力で柔軟なメソッドであり、様々な畳み込み操作に使用できます。