1. ホーム
  2. ruby

[解決済み] RubyでHashの値による降順ソート

2023-08-07 01:44:50

質問

入力ハッシュを h = { "a" => 20, "b" => 30, "c" => 10 }

昇順ソート h.sort {|a,b| a[1]<=>b[1]} #=> [["c", 10], ["a", 20], ["b", 30]]

しかし、私は [["b", 30], ["a", 20], ["c", 10]]

逆にどのようにすればいいのでしょうか、何をもって <=> は何を意味するのでしょうか?

どのように解決するのですか?

よりきれいに、よりクリアに、より速く、一挙に手に入れることができるのです こんな感じ。

h.sort_by {|k,v| v}.reverse

1000要素のハッシュをランダムな値でソートする3000回の反復処理の時間をベンチマークしたところ、以下のようなタイムが得られました。

h.sort {|x,y| -(x[1]<=>y[1])} -- 16.7s
h.sort {|x,y| y[1] <=> x[1]} -- 12.3s
h.sort_by {|k,v| -v} -- 5.9s
h.sort_by {|k,v| v}.reverse -- 3.7