提供了以下红宝石哈希:
{
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”)对哈希进行排序,例如“猫”要比较的值是(2 + 10 + 11)= 23,“翅膀”的值是(3 + 5 + 7) = 15 所以如果我只比较这两个,它们的顺序是正确的,最高的总和在顶部。
可以安全地假设它总是 {1: value, 2: value, 3: value, 4: value} 因为这些是我定义的常量的键。
还可以安全地假设我只想排除键“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
结果似乎有点不对,但它似乎是我的代码,一旦我确认我会接受答案,谢谢乔丹!
我已经更新了我的解决方案以使用韦恩康拉德的想法,请参阅我对他的回答的评论 - 它是否可能在排序时没有携带所有内容,我在我的评论中链接到一个图像,以图表形式显示实际排序的结果..对我来说似乎很奇怪..