В Ruby 1.9+ хэши не упорядочены, вместо этого они поддерживают порядок вставки записей:
Из документов:
Хэши перечисляют свои значения в порядкечто соответствующие ключи были вставлены.
require 'pp'
hash = {
'a' => 1,
'c' => 3
}
hash['b'] = 2
pp hash
# >> {"a"=>1, "c"=>3, "b"=>2}
В качестве альтернативы сортировке ключей хеша и последующей итерации по хешу, сам хеш может быть отсортирован, а затем восстановлен, если вы хотите пройти его напрямую:
ruby-1.9.2-p136 :010 > Hash[*hash.sort.flatten]
=> {"a"=>1, "b"=>2, "c"=>3}
Используйте это как:
hash = Hash[*hash.sort.flatten]
Вероятно, быстрее с большим хешем сортировать ключи, затем обойти их, но если вам нужен хеш в порядке, который будет это делать.