each_with_objectを使ってみる

数学パズルで出てきた。
定義済みの配列の中身をループしつつ、別の配列を渡してそれをループ内でも活用できるという関数。(参考: injectとeach_with_objectって何が違うのさ?)

ary = [["milk", 100], ["banana", 30], ["apple", 50]]
result = ary.each_with_object({}) do |(name, price), hash|
    hash[name] = price
end
puts result
// => {"milk"=>100, "banana"=>30, "apple"=>50}

数学パズルの中では、43問目の「カードを逆順になるように並べ替える」という問題の中で、並べ替えた後の順番を表現する際に使っている。