Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > library _builtin > class Hash > invert
invert -> Hash
値からキーへのハッシュを作成して返します。
異なるキーに対して等しい値が登録されている場合の結果は不定であることに 注意してください、そのような場合にこのメソッドを利用することは意図され ていません。
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