##each_with_object
配列やハッシュの要素を使って、新たに配列やハッシュを作成したりする際に簡潔に書くことができる。
- 引数に渡されたオブジェクトが常にhash変数に入っている。
array = [[:hoge, 1], [:fuga, 2], [:piyo, 3]]
array.each_with_object({}) do | (key, value), hash |
hash[key] = value
end
# => {:hoge=>1, :fuga=>2, :piyo=>3}
##inject
- ブロック内で最後に評価された値が入るのでブロック内でもう一度
hash
を書かないといけない。
array = [[:hoge, 1], [:fuga, 2], [:piyo, 3]]
hash = array.inject({}) do | hash, (key, value) |
hash[key] = value
hash
end
#=> {:hoge=>1, :fuga=>2, :piyo=>3}
配列やハッシュの要素から一つのオブジェクトを作る場合に使うほうが向いてる。
array = [2, 3, 4, 5]
array.inject do |result, item|
result + item
end
#=> 14
##参考