Сохранение хеширования сохраняется между итерациями, если не изменено?

Если я повторяю один раз хэш, то делайте это снова без изменения содержимого, ключи гарантированно появятся в том же порядке?

Быстрый тест предполагает как можно больше:

> 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