При условии, что следующий рубин хэш:Сортировка вложенного хэша в рубине
{
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: значение, 2: значение, 3: значение, 4: значение}, поскольку это ключи для констант, которые я определил.
Также можно предположить, что я только когда-либо хочу, чтобы исключить ключ «4», и всегда используйте клавиши «1», «2» и «3»
На основании предположения I Джордана получил эту работу:
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
результаты кажутся немного прочь, но это, кажется, мой код, когда я подтверждаю, что я принимаю ответ, спасибо Джордана!
Я обновил свое решение, чтобы использовать идею Уэйна Конрада, см. Мой комментарий к его ответу - возможно ли, что он не несет все, когда он сортируется, я связан с изображением в своем комментарии, который показывает результат фактического сортировать в виде графика .. кажется странным для меня ..
+1, хорошее решение. Я не знаю, почему так много людей отказываются использовать деструктурирующую привязку, например, решение Иордании является ужасно уродливым из-за того, что оно не используется. Одно предложение: замените внешний параметр 'key' на' _', чтобы он понял, что вы его нигде не используете. –
Это то же самое (но более эстетично), но я нарисовал результаты из своего рода, и это то, что вышло с помощью http://imgur.com/NFxfM, кажется странным .. он сортируется .. но это почти похоже на то, что он не отсортирован достаточно. – Rabbott
Jörg: Я согласен с тем, что мое решение менее симпатично, чем Уэйн, но одно инъекция показалось мне более эффективным, чем цепочка reject-> collect-> inject. Я предпочитаю перебирать структуру данных меньше, когда это возможно. –