1. ホーム
  2. ruby

[解決済み] RubyのHashを数値でソートする方法は?

2022-04-24 13:03:05

質問

カウンタハッシュをカウント順に並べ替えたいのですが、どうすればよいですか?問題は、デフォルトのHash.sort関数が、数値の大きさではなく文字列のように数値をソートすることです。

すなわち、与えられたハッシュ。

metrics = {"sitea.com" => 745, "siteb.com" => 9, "sitec.com" => 10 }

このコードを実行する

metrics.sort {|a1,a2| a2[1]<=>a1[1]}

は、ソートされた配列を返します。

[ 'siteb.com', 9, 'sitea.com', 745, 'sitec.com', 10]

745が9より大きな数字であっても、9が一番に表示されます。誰が一番多くカウントしているかを表示しようとすると、これは私の人生を難しくしています。)

ハッシュ(配列でも可)を数値の大きさでソートする方法について何かアイデアはありますか?

よろしくお願いします。

解決方法は?

文字列の値でソートされないので、どのように結果を得たのかわかりません。逆にしてください a1a2 の例では

どんな場合でもベストな方法は(Mladenのように)。

metrics = {"sitea.com" => 745, "siteb.com" => 9, "sitec.com" => 10 }
metrics.sort_by {|_key, value| value}
  # ==> [["siteb.com", 9], ["sitec.com", 10], ["sitea.com", 745]]

結果としてハッシュが必要な場合は to_h (Ruby 2.0+ の場合)

metrics.sort_by {|_key, value| value}.to_h
  # ==> {"siteb.com" => 9, "sitec.com" => 10, "sitea.com", 745}