Сортировать элементы во вложенном хэше по их ценности

Мне отправляют вложенный хэш, который необходимо отсортировать по его значениям. Например:

@foo = {"a"=>{"z"=>5, "y"=>3, "x"=>88}, "b"=>{"a"=>2, "d"=>-5}}

При выполнении следующего:

@foo["a"].sort{|a,b| a[1]<=>b[1]}

Я получаю:

[["y", 3], ["z", 5], ["x", 88]]

Это здорово, это именно то, что я хочу. Проблема в том, что я не всегда буду знать, какие ключи мне присылают, поэтому мне нужен какой-то цикл. Я пытался сделать следующее:

@foo.each do |e|   
  e.sort{|a,b| a[1]<=>b[1]}
end

Для меня это имеет смысл, так как если я вручную вызову @ foo.first [0], я получаю

"a"

, а @ foo.first [1] возвращает

{"z"=>5, "y"=>3, "x"=>8}

, но по какой-то причине это не так. не сортируются должным образом (например, вообще). Я предполагаю, что это потому, что каждый вызывает sort для всего хеш-объекта, а не для значений "a". Как мне получить доступ к значениям вложенного хэша, не зная, что это за ключ?

7
задан Phrogz 7 February 2011 в 18:26
поделиться