Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Hashクラス > invert

instance method Hash#invert

invert -> Hash[permalink][rdoc]

値からキーへのハッシュを作成して返します。

異なるキーに対して等しい値が登録されている場合、最後に定義されている値が使用されます。

h = { "a" => 0, "b" => 100, "c" => 200, "d" => 300, "e" => 300 }
p h.invert   #=> {0=>"a", 100=>"b", 200=>"c", 300=>"e"}

参考

値が重複していたときに備えて、変換後の値を配列として保持するには、次のようにします。

def safe_invert(orig_hash)
  result = Hash.new{|h,key| h[key] = [] }
  orig_hash.each{|key, value|
    result[value] << key
  }
  result
end
p safe_invert({"a"=>1, "b"=>1, "c"=>3})
    #=> {1=>["a", "b"], 3=>["c"]}

#転載:Rubyレシピブック No.120

[SEE_ALSO] Hash#key