📝

Ruby sortメソッドでハッシュを並び替える

2023/07/12に公開

今日は、sortメソッドを試用したハッシュの並び替え方法についてアウトプットします。
sortメソッドで配列を並び替える

基本構文

ハッシュ.sortとすると、キーを基準に昇順で並び替えられた二次元配列を返します。

irb(main):001:0> h = {b:1, c:2, a:3}
=> {:b=>1, :c=>2, :a=>3}

# キー名で昇順並び替え
irb(main):002:0> h.sort
=> [[:a, 3], [:b, 1], [:c, 2]]

# 降順並び替えにする場合はreverseメソッドを使います
irb(main):003:0> h.sort.reverse
=> [[:c, 2], [:b, 1], [:a, 3]]

# 返り値をハッシュにしたい時にはto_hメソッドを併用
irb(main):007:0> h.sort.to_h
=> {:a=>3, :b=>1, :c=>2}

バリューで並び替えを行いたい時は、sortメソッドにブロックを用いて条件を指定する事もできますが、sort_byメソッドを使用する方がシンプルに書けます。

# バリューの昇順で並び替え
irb(main):005:0> h.sort_by {|key, val| val}
=> [[:b, 1], [:c, 2], [:a, 3]]

# 降順で並び替えるときは-valのようにマイナス記号をつければOK
irb(main):009:0> h.sort_by {|key, val| -val }
=> [[:a, 3], [:c, 2], [:b, 1]]

参考

https://pikawaka.com/ruby/sort
https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/sort_by.html

Discussion