プログラミング的なSomething

プログラミング的なSomething

ITエンジニア(?)目線で生活・自転車・トレーニング話を綴ります

Rubyレシピブック その②(ハッシュ)

読書メモです。

1つのキーに複数の値が対応するハッシュを作る

複数の値は配列で保存されます。

h = Hash.new{ | h, key | h[key] = [] }
h["a"] << 1
h["b"] << 2
h["a"] << 2

irb(main):297:0> hash
=> {"a"=>[1, 2], "b"=>[2]}

この方法を用いる場合、ハッシュに新しいキーを追加するときに配列でないものを値にしてしまうと意味がなくなってしまいます。

ハッシュにおけるソート

sort_byメソッドです。

h = {"a" => "Ruby","b"=>"Perl","c"=>"Python"}

# キーでソート
irb(main):319:0> h.sort_by{|k, v| k }
=> [["a", "Ruby"], ["b", "Perl"], ["c", "Python"]]

# 値でソート
irb(main):320:0> h.sort_by{|k, v| v }
=> [["b", "Perl"], ["c", "Python"], ["a", "Ruby"]]

# キー、値の順でソート
irb(main):321:0> h.sort_by{|k, v| [k,v] }
=> [["a", "Ruby"], ["b", "Perl"], ["c", "Python"]]