次のルビーハッシュを提供しました。
{
cat: {
1: 2,
2: 10,
3: 11,
4: 1
},
wings: {
1: 3,
2: 5,
3: 7,
4: 7
},
grimace: {
1: 4,
2: 5,
3: 5,
4: 1
},
stubborn: {
1: 5,
2: 3,
3: 7,
4: 5
}
}
「4」を除く「leaf」の合計でハッシュを並べ替えるにはどうすればよいですか。たとえば、「cat」の比較値は(2 + 10 + 11)= 23、「wings」の値は(3 + 5 + 7)= 15なので、これら2つだけを比較すると、正しい順序になり、合計が最も高くなります。
これらは私が定義した定数のキーであるため、常に{1:値、2:値、3:値、4:値}になると想定しても問題ありません。
また、キー「4」のみを除外し、常にキー「1」、「2」、および「3」を使用したいと考えるのも安全です。
ジョーダンの提案に基づいて、私はこれを機能させました:
tag_hash = tag_hash.sort_by do |h|
h[1].inject(0) do |sum, n|
n[0] == 4 ? sum : sum + (n[1] || 0)
end
end
結果は少しずれているように見えますが、それは私のコードのようです。答えを受け入れることを確認したら、Jordanに感謝します。
ウェインコンラッドのアイデアを使用するようにソリューションを更新しました。彼の回答に対するコメントを参照してください-並べ替え時にすべてが含まれていない可能性はありますか?コメント内の画像にリンクして、実際の並べ替えの結果をグラフ形式で示しています..私には奇妙に思えます..