[Ruby] each_with_objectメソッドの使い方

<each_with_objectメソッドとは>

配列やハッシュの要素を使って、新たに配列やハッシュを作成する。eachやinjectと同じように繰り返しを行うメソッド

例)

array = [[:ogino, 1], [:fujiwara, 2], [:nakamura, 3]]

array.each_with_object({}) do | (key, value), hash |
  hash[key] = value
end
 => {:ogino=>1, :fujiwara=>2, :nakamura=>3}

<injectメソッドとの違い>

array = [[:ogino, 1], [:fujiwara, 2], [:nakamura, 3]]

hash = array.inject({}) do | hash, (key, value) |
  hash[key] = value
  hash
end

p array   => [[:ogino, 1], [:fujiwara, 2], [:nakamura, 3]]
p hash   => {:ogino=>1, :fujiwara=>2, :nakamura=>3}

each_with_objectメソッドは破壊的メソッド*に対し、injectメソッドは破壊的メソッドではない

 *レシーバにあたるオブジェクトの値そのものを変更してしまうメソッド

・ブロック変数の書き方の順が逆

タイトルとURLをコピーしました