2013-06-28 14 views
34

ハッシュを1回繰り返してから内容を変更せずにもう一度やり直した場合、キーは同じ順序で表示されますか?上記許可されている場合は、変更されていない場合、イテレーション間でハッシュの順序が保持されますか?

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

別の質問を、私はすべての新しいキーを追加することなく、値のみを変更し、それを反復処理し、キーの順序があること持つことができます。

は簡単なテストでは同じくらい示唆します変わらない?

このPythonの質問に似

:私は要素が完全に指定された順序を持っているかどうかに興味がないんだけど、提案複製、変更することなく二つの連続反復が同じシーケンスを提供することを唯一の制限とは異なりDo dicts preserve iteration order if they are not modified?

+0

どちらの回答状態でも、挿入順序は維持されます。これは、Hashクラスの中に目に見えないタイムスタンプを許さない限り、「順序付けられた」とは「並べ替えられた」ことを意味する人々を混乱させます。 –

+1

[Ruby:Hash.keysメソッドとHash.valuesメソッドから返されるキー/値の順序は何ですか?](http://stackoverflow.com/questions/5208512/ruby-what-is-the-order- of-keys-values-by-hash-keys-and-hash-values-met) –

答えて

64

1.9より前では、列挙されたハッシュの挙動はルビー仕様ではなかったため、実装に至りました。基本的にハッシュ列挙動作/パターンは言語によって定義されておらず、 ?挿入順序?毎回別のメソッド)

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

RubySpec

+5

ruby​​ 2.2.0+はrubyspecをもうフォローしません。http://rubini.us/2014/12/31/を参照してください。 mats-s-ruby-developers-don-t-use-rubyspec/ – johnlinvc

+0

そしてrubyspecは1000回以上コミットされた後に生き延びましたhttp://eregon.github.io/rubyspec/2015/07/29/rubyspec-is -reborn.html – nurettin

関連する問題