Ruby Tips!

RubyのTipsを紹介します

ハッシュのキーと値を入れ替える

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]}