В большинстве случаев это действительно не имеет значения так очень. Просто выберите хороший размер, такой как 4K или 16K и придерживайтесь его. Если Вы положительны , что это - узкое место в Вашем приложении, то необходимо начать представлять для нахождения оптимального размера буфера. Если Вы выбираете размер, это является слишком маленьким, Вы будете напрасно тратить время, делая дополнительные операции ввода-вывода и дополнительные вызовы функции. Если Вы выбираете размер, это является слишком большим, Вы начнете видеть много неудачных обращений в кэш, которые действительно замедлят Вас. Не используйте буфер, более крупный, чем Ваш размер кэша L2.
Вызов sort по хэшу преобразует его во вложенные массивы, а затем сортирует их по ключу, поэтому все, что вам нужно, это следующее:
puts h.sort.map {|k,v| ["#{k}----"] + v}
И если вам действительно не нужен "--- - "часть, это может быть просто:
puts h.sort
hash.each do |key, array|
puts "#{key}-----"
puts array
end
Что касается порядка, я должен добавить, что в 1.8 элементы будут повторяться в случайном порядке (ну, фактически, в порядке, определенном хеш-функцией Fixnum), а в 1.9 он будет повторяться в порядок букв.
hash.keys.sort.each do |key|
puts "#{key}-----"
hash[key].each { |val| puts val }
end