34

ハッシュを 1 回繰り返し、内容を変更せずにもう一度繰り返した場合、キーは同じ順序で表示されることが保証されますか?

簡単なテストで次のことがわかります。

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

別の質問ですが、上記が許可されている場合、新しいキーを追加せずに値のみを変更して繰り返し、キーの順序を変更できますか?

このpythonの質問に似ています:変更されていない場合、辞書は反復順序を保持しますか?

提案された複製とは異なり、要素が完全に指定された順序を持っているかどうかには興味がありません。変更なしの2つの連続した反復が同じシーケンスを提供するという制限のみです。

4

1 に答える 1

64

1.9 より前では、列挙されたハッシュの動作は Ruby 仕様に含まれていなかったため、実装次第でした。基本的に、ハッシュ列挙の動作/パターンは言語によって定義されておらず、実装は実際に必要なことを何でも行うことができました (ランダム? ソート? 挿入順序?毎回違う方法? なんでもあり!)

1.9+ では、ハッシュ列挙は言語によって挿入順に指定されているため、プラットフォームが 1.9+ であることがわかっている場合は、それを信頼できます。

Rubyスペック

于 2013-06-28T00:29:37.717 に答える