Rubyでハッシュ(連想配列)のキーもしくは値でソートする方法

Rubyでハッシュ(連想配列)のキーもしくは値でソートする方法を知りたい。
本記事ではこのような悩みを解決。
実装方法について解説します。
ハッシュのキーでソートする方法
array = {"あ"=>100, "さ"=>250, "か"=>200, "な"=>50, "た"=>300}
# ソート結果
p array.sort.to_h
#{"あ"=>100, "か"=>200, "さ"=>250, "た"=>300, "な"=>50}
ハッシュのキーでソートするコード例です。
キーのあいうえお順でソートされてるのがわかります。
キーのソートにはsortメソッドとto_hメソッドを組み合わせます。
使い方は以下の通りです。
ハッシュ.sort.to_h
sortメソッドだけでもソートされますが、連想配列から二次元配列に変換されてしまいます。
to_hメソッドを使う事で、ハッシュのままソートが可能になります。
ハッシュの値でソートする方法
array = {"あ"=>100, "さ"=>250, "か"=>200, "な"=>50, "た"=>300}
# ソート結果
p array.sort_by {| k, v | v}.to_h
#{"な"=>50, "あ"=>100, "か"=>200, "さ"=>250, "た"=>300}
ハッシュの値でソートするコード例です。
数値順にソートされてるのがわかります。
ハッシュの値でソートするにはsort_byメソッドを使います。
sortメソッドでも値でソートできますが、sort_byメソッドの方がコードを省略でき、且つ複雑な条件式にも対応できます。
ハッシュの値でソートするsort_byメソッドの使い方は以下の通りです。
ハッシュ.sort_by {| キー変数, 値変数 | 値変数}.to_h
sort_byメソッドのブロック内でキー変数と値変数を引数で指定。
パイプ(|)の後にソートしたい方の変数(今回の場合は値変数)を入れたらソートできます。
まとめ
ハッシュのキーもしくは値でソートする方法を紹介しました。
以上で解説を終わります。
目次