ハッシュのキーと値を入れ替える
Rubyでハッシュのキーと値を入れ替えるにはHash#invert
メソッドを利用する。
h = {:a => 1, :b => 2, :c => 2, :d => 3} p h.invert #=> {1=>:a, 2=>:c, 3=>:d}
Hash#invert
では、同じ値を持つ要素があった場合、1つしか残らないことに注意。
値を配列で保持するHash#invert
の変形は以下のように実装できる。
def invert(hash) result = Hash.new hash.each{|k, v| result[v] = [] unless result[v] result[v] << k } result end h = {:a => 1, :b => 2, :c => 2, :d => 3} p invert(h) #=> {1=>[:a], 2=>[:b, :c], 3=>[:d]}