【初心者必見】Ruby injectメソッドの使い方 (配列、hash、reduce、メソッド指定、初期値指定)

こんちは!

編集長です!

今回はRubyのinjectメソッドについて書いていきます!

injectメソッドについて

  • injectメソッドとは
  • injectを配列に使う
  • injectをhashに使う

の順にしっかり解説していきます!

それでは行ってみましょう!

injectメソッドとは

まず、injectメソッドとは何かについて見ていきます。

Ruby公式リファレンスによると

injectメソッドは、ブロックを使って繰り返し計算を行うのに使います。ブロックに順に「要素1、要素2」、「ブロックの前回の戻り値、要素3」、「ブロックの前回の戻り値、要素4」、...を渡します。メソッドの戻り値はブロックが最後に返した値になります。

このように記されています。

一言でいうと、前の戻り値と要素を繰り返し処理し続けるメソッドということです。

 

編集長
「reduce」と言う同名のメソッドもあるけど、injectが使われることが多い!

injectを使ってみる

イメージしにくい方のために、実際にinjectメソッドを使っていきましょう。

配列に使う

まず基本となる、配列に使う方法です。

ここでinjectの処理の順番について見ていきましょう

  1. sumに1、numに2が入る
  2. sum + numが行われる
  3. sumに前の返り値である3、numに3番目の要素である5が入る
  4. sum + numが行われる
  5. 以下繰り返し

このように処理が行われていきます。

初期値指定

injectは初期値を指定することもできます。

このように第一引数に初期値を指定することができます。

編集長
初期値に指定がない場合は0になる!

メソッドを指定する

injectは引数にメソッドをシンボルで与えることで、そのメソッドを実行することができます。

このように「+メソッド」が実行されていることがわかります。

hashに使う

次にinjectメソッドをhashに使ってみましょう!

hashに使った場合でも、配列に使った場合と比べて処理は変わりません。

まずブロックの一つ目の引数であるfについて見ていきましょう。

  • 一度目のループでは一つ目の要素である[:one, 1]が代入される。
  • 二度目のループでは一度目のループの返り値である[:one, 1]が代入される。

それぞれinjectの動作が確認できます。

次にブロックの二つ目のであるsについて見ていきましょう。

  • 一度目のループでは二つ目の要素である[:two, 2]が
  • 二度目のループでは三つ目の要素である[:three, 3]が

それぞれ代入されていることがわかります。

 

編集長
配列と処理は変わらないけど、代入される形が変わっている!

まとめ

今回はRubyのinjectメソッドについて見ていきました!

injectメソッドは処理が少し複雑で混乱してしまいそうになりますが、この記事を参考にぜひ理解してください!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です