哈希sorting保留在迭代之间,如果没有修改?

如果我迭代散列一次,然后再次做,而不修改的内容,密钥保证出现在相同的顺序?

一个快速testingbuild议如此之多:

> h = {'a' => 1, 'b' => 2, 'c' => 3} > 100_000.times.map { h.to_s == h.to_s }.all? => true 

另一个问题,如果以上是允许的,我可以迭代通过它只改变值,而不添加任何新的密钥,并且按键的顺序是不变的?

类似于这个python问题: 如果dicts没有修改,是否保留迭代次序?

不像提出的重复,我不关心元素是否具有完全指定的顺序,只有两个连续的迭代没有修改提供相同的序列的限制。

在1.9之前,枚举哈希的行为不在ruby规范中,因此需要实现 – 基本上,哈希枚举行为/模式是不确定的语言和实现真的可以做任何他们想要的(随机sorting插入顺序?每次都有不同的方法?什么都行!)

1.9+,哈希列举由语言指定为插入的顺序,所以如果你知道你的平台是1.9+,你可以依靠它。

RubySpec