Как отсортировать хеш со значением внутри него - PullRequest
0 голосов
/ 10 октября 2019

У меня есть хеш

H = { abc: [1,1,2], def: [0,1,1], efg: [3,4,7] }

Как отсортировать по убыванию по последнему индексу массива, т.е. мне нужно, чтобы хеш был таким, как этот H = { efg: [3,4,7], abc: [1,1,2], def: [0,1,1]}

H.values[2].sort

1 Ответ

2 голосов
/ 10 октября 2019

Вы можете преобразовать его в массив, затем обратно в хеш:

x = {a: [1,2,3], c: [7,8,9], b: [4,5,6]}
x.sort_by { |k,v| v.last }.reverse.to_h
# => {:c=>[7, 8, 9], :b=>[4, 5, 6], :a=>[1, 2, 3]}

sort_by превращает его в массив кортежей:

x.sort_by { |k,v| v.last }
# => [[:a, [1, 2, 3]], [:b, [4, 5, 6]], [:c, [7, 8, 9]]]

Конечно, вы можете вызвать .reverse чтобы получить нисходящий порядок

, и вы можете вызвать .to_h для этой структуры данных, чтобы снова создать хеш.

Хотя, я думаю, что не нормально думать о хешах как о упорядоченных структурахна самом деле они сохраняют порядок, но обычно, если вы работаете с упорядоченными данными, вы сохраняете их как массив. Я хотел бы спросить, почему вы должны использовать упорядоченный хеш.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...