同じコレクション上の2つの繰り返しが同じ順序でオブジェクトを返すと想定するのは安全でしょうか?明らかに、コレクションが他の方法で変更されていないと仮定されます。FOREACHから返されるオブジェクトの順序は安定していますか?
答えて
短い回答 - はい。
しかし、コレクションのアイテムの順序は、コレクションのタイプ(たとえば、辞書)によって異なります。
foreachループを使用して、変更されていない単一のコレクションを反復処理するたびに同じ結果が得られます。
コレクションの種類によって異なります。ほとんどのコレクションでは、答えは「はい」です。
ただし、これは保証されません。コレクション型のドキュメントでは、そうするかどうかを指定する必要がありますが、ほとんどの場合、その詳細は一般的に見えます。しかし、それが安定していない場合は、ドキュメントに言及していない場合、それは非常に見落としになります。
ほとんどのコレクションでは、これを想定するのが安全だと思います。特定のコレクションが非決定的な方法で実装された列挙子を持つ可能性はありませんが、それはおそらく起きないでしょう...
"おそらく"動作するコードが好きかどうかによって異なります。個人的に私はそれよりも自信がありたい! – MarkJ
すべての組み込みコレクションとおそらく答えは「はい」ですがそこには純粋なコレクションクラスがありますが、ドキュメントにはIEnumerable
のために制定された制約はありません。したがって、すべての反復が安定していなければならないということはありません。
foreach (int i in new Shuffler(1, 2, 3, 4, 5, 6, 7, 8, 9))
Console.WriteLine(i);
これはよく反復ごとに異なる順序を生成するクラスとして実装されることがあります。
は、私は次のユースケースを想像することができます。
奇妙な境界線のケースも考慮する必要がある場合は、答えは「No」である必要があります。
ええとジェームズは彼の答えを変えましたか?私が私のことを書いたとき、それはまだオリジナルだった。 :/ –
オーダーが一貫しない場合の優れた例! –
通常、要素は同じ順序で返されますが、絶対に保証はありません。これは、コレクションクラスの内部実装に完全に依存しています。
たとえば、要素をランダムな順序で返すように特別に設計されたコレクションクラスのケースを見ることができます。
つまり、コレクションクラスの内部実装がわからない限り、はには何も指定しないでください。
反復処理中のクラスの具体的な実装が分からない限り、これを保証することはできません。
要素の順序が定義されているコレクション(例:List<T>
)は、安定した順序で列挙されます。
オブジェクトの状態が変化しないコレクションでは、要素が同じ順序で元に戻る可能性が高くなります。 Dictionary<K,V>
ですが、これは仕様によって保証されていません。
これが当てはまらない例として、テーブルをコンパクト化またはサイズ変更するハッシュテーブルベースの辞書実装を想像してみてください。このような実装では、安定した反復順序が保証されません。
「改変されていない」(NMの回答) - 辞書のような複雑なコンテナの多くは、順序を保持することを保証していないことに注意してください。アイテムを追加すると、アイテムが最後に表示され(注文が保存されているような印象を与えます)、内部バケットが完全に異なる順序で再構成されることがあります。
SortedList <>などのようなものは、明らかに独自のルールを持っています。
Linqは、この目的のためにIOrderedEnumerableインターフェイスを定義しています。
- 1. Luceneの複数値フィールドの順序は安定していますか?
- 2. AAツリーは挿入順序より安定していますか?
- 3. MYSQLテーブルの行の順序は固定されているため、クエリは常にその順序でそれらを返します。
- 4. 順序付き/順序なしリストの高さが返されない
- 5. Assembly.GetTypes()で返される型の順序は何ですか?
- 6. MySQLのLIMITキーワードは返されるデータの順序を保証しますか?
- 7. JavaScript配列の順序は保証されていますか?
- 8. このCステートメントの順序は明確に定義されていますか?
- 9. 縮小の順序はYaccで定義されていますか?
- 10. 順序付けされた順序付けられていないSTLコンテナ
- 11. 特定の順序付けられていないリストからliオブジェクトを取得するためのjQueryセレクタ
- 12. :私は問題が限度でのfindAllクエリの返されたデータの順序を設定し、オフセットましどのセット返されたデータの順序
- 13. getElementsByTagName()を使用して返される要素の順序
- 14. jQuery JSONオブジェクトを元の順序で繰り返します。
- 15. Apache HttpAsyncClientはどれくらい安定していますか?
- 16. カサンドラはどれくらい安定していますか?
- 17. Netty 4はどれくらい安定していますか?
- 18. オブジェクトへのLinq:GroupByは要素の順序を保持していますか?
- 19. PHP - だから、特定の順序で
- 20. NHibernateの順序付きリストコレクションは、その順序でフェッチされていない
- 21. Javaで順序付けられていない繰り返し可能なCollectionクラスはありますか?
- 22. JSONArray.names()はオブジェクトの順序を変更しますか?
- 23. Java varargsは、与えられた順序と同じ順序で受信されますか?
- 24. SQL Serverのプロパティはクラスタ化されています。順序は
- 25. mySQLを特定の値で順序付けしてからDESC?
- 26. Dictはキーと値を同じ順序で返しますか?
- 27. ListViewは別のアクティビティから返されたときの順序を変更します
- 28. LinkedHashMapのkeySet()から作成されたArrayListは、挿入順序を保持していますか?
- 29. iOS 5/Lion Coreデータ順序関係:順序を指定しますか?
- 30. epollのファイルディスクリプタが返される順序は?
こんにちは...私たちの両方が同じことをしたようです。 1つの文章を書いて投稿した後、すぐにそれを編集して詳しく説明します。 –
確かに。 あなたの答えは私よりも適切だと思いますが、OPがそれを決定的なものとしてタグ付けしてくれることを願っています。確かに普及した投票を勝ち取っているようだ:) –
最終的な答えとしてタグ付けすることの問題は、もちろん、正確ではないということです! –