Сохранение хеширования сохраняется между итерациями, если не изменено?
Если я повторяю один раз хэш, то делайте это снова без изменения содержимого, ключи гарантированно появятся в том же порядке?
Быстрый тест предполагает как можно больше:
> h = {'a' => 1, 'b' => 2, 'c' => 3}
> 100_000.times.map { h.to_s == h.to_s }.all?
=> true
Другой вопрос, если это разрешено, могу ли я перебирать его, изменяя только значения без добавления каких-либо новых ключей и не изменяя порядок ключей?
похож на этот вопрос python: Do dicts сохраняют порядок итерации, если они не изменены?
В отличие от предлагаемого дубликата меня не интересует, имеют ли элементы полностью определенный порядок, только ограничение на то, что две последовательные итерации без модификации предоставляют одну и ту же последовательность.
Ответы
Ответ 1
До 1.9, поведение перечисляемых хэшей не было в спецификации ruby и, следовательно, было связано с реализацией - в основном, поведение/шаблон перечисления хэша был undefined языком, и реализации могли действительно делать все, что им нужно (случайное? сортировка? порядок вставки? разный метод каждый раз? все идет!)
1.9+, перечисление хэшей задается языком в порядке вставки, поэтому, если вы знаете, что ваша платформа равна 1.9+, вы можете положиться на нее.
RubySpec