基本説明
- injectメソッド:ブロックを使う繰り返し計算を行うのに使います。メソッドの戻り値は最後のブロックの実行結果です。
- shiftメソッド:配列の最初の要素を削除し、その要素を返す。レシーバ自身を変更するメソッド。配列が空のときはnilを返す。
例題1
以下の出力結果は?
a = [4,3,2,1]
b = a
c = b.shift
puts a.inject { |x, i| x * i } + c
RUBY技術者認定試験 公式ガイド (ITpro BOOKs) 152p 問題13より抜粋
図解
injectは、値を置いておく箱に、全ての要素をひとつずつ、ブロック内部の処理(今回ならx * i)にしたがって順次繰り返しています。
変数aにあった配列の最初の要素(4)は、shiftメソッドにより取り除かれました。shiftメソッドはレシーバ自身を変更するメソッドなので。
例題2
inject メソッドの理解に shiftがノイズなので、上記の図解から以下の出力結果を当ててください。
a = [5,4,3,2,1]
puts a.inject { |x, i| x * i }
実行結果は以下でサクッと試せます
Online Ruby Editor and IDE - Fast, Powerful, Free - Repl.it
参考
正解
- 例題1:10
- 例題2:120
