カウントでソートしようとしているカウンター ハッシュがあります。 発生している問題は、デフォルトの 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 が表示されます。誰がトップのカウントを持っているかを表示しようとすると、これが困難になります。 :)
ハッシュ (または配列) を数値のサイズで並べ替える方法について何かアイデアはありますか?
どのような助けでも感謝します。
ベストアンサー1
文字列値でソートされないので、どのように結果を得たのかわかりません...例ではa1
逆にする必要がありますa2
いずれにしても最善の方法は(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}