Вы можете преобразовать его в массив, затем обратно в хеш:
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
для этой структуры данных, чтобы снова создать хеш.
Хотя, я думаю, что не нормально думать о хешах как о упорядоченных структурахна самом деле они сохраняют порядок, но обычно, если вы работаете с упорядоченными данными, вы сохраняете их как массив. Я хотел бы спросить, почему вы должны использовать упорядоченный хеш.