Предоставляется следующий рубиновый хеш:
{
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, значение для «крыльев» будет be (3 + 5 + 7) = 15, поэтому, если бы я сравнивал только эти два, они были бы в правильном порядке, самая высокая сумма сверху.
Можно с уверенностью предположить, что ВСЕГДА будет {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
Результаты кажутся немного неправильными, но, похоже, это мой код, как только я подтверждаю, что приму ответ, спасибо Джордан!
Я обновил свое решение, чтобы использовать идею Уэйна Конрада, см. Мой комментарий к его ответу - возможно ли, что он не несет все, когда сортирует, я связал изображение в своем комментарии, который показывает результат фактической сортировки в виде графика .. мне кажется странным ..