ハッシュを反転する
h = { 'Apple' => 'red', 'Banana' => 'yellow', 'Lemon' => 'yellow', 'Carrot' => 'orange' } p h.invert #=> {"red"=>"Apple", "orange"=>"Carrot", "yellow"=>"Banana"} # 色がかぶっているので,その分消えている. h2 = {} h.each_pair {|k,v| h2[v]=k} p h2 p h.inject({}) {|x,y| x[y[1]] = y[0]; x} # も同じ結果になる
キーではなく値から検索する:
def get_food_by_color( h, c) ret = [] h.each_pair{|k,v| ret << k if v==c} ret end def print_food_color( h, c) f = get_food_by_color( h, c) case f.size when 0; p "There is no #{c} food." when 1; p "#{f.join(',')} is #{c} food." else; p "#{f.join(',')} are #{c} foods." end end h = { 'Apple' => 'red', 'Banana' => 'yellow', 'Lemon' => 'yellow', 'Carrot' => 'orange' } print_food_color( h, 'red') print_food_color( h, 'blue') print_food_color( h, 'yellow') #=> "Apple is red food." #=> "There is no blue food." #=> "Lemon,Banana are yellow foods."
Hash#key(val)を使えば,任意の値を持つキーを返すけど,複数のキーが同一の値を持つ場合に,どのキーが返るかは不定らしい.