同じコレクション上の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. forkjoinの返り値は特定の順序で返されますか?
- 3. AAツリーは挿入順序より安定していますか?
- 4. プロパティは指定された順序で設定されていますか?
- 5. dict.values()は順序付きのシーケンスで返されますか?
- 6. MYSQLテーブルの行の順序は固定されているため、クエリは常にその順序でそれらを返します。
- 7. RedisコマンドZRANGEBYLEXから返される要素の順序は何ですか
- 8. Assembly.GetTypes()で返される型の順序は何ですか?
- 9. 順序付き/順序なしリストの高さが返されない
- 10. 順序付けされたリストから順序付けられていないリスト項目を除外する
- 11. PHPのmysqlクエリから返された行の順序?
- 12. MySQLのLIMITキーワードは返されるデータの順序を保証しますか?
- 13. オブジェクトはZ-インデックスで順序付けされていません
- 14. JavaScript配列の順序は保証されていますか?
- 15. str.split()の分割順序は保証されていますか?
- 16. このCステートメントの順序は明確に定義されていますか?
- 17. (gspread):.get_all_recordsは順序付けられていない辞書を返します
- 18. Qtクイックチルドレンの読み込み順序は指定されていますか?
- 19. 縮小の順序はYaccで定義されていますか?
- 20. 関数パラメータの内部実行順序は定義されていますか?
- 21. 特定の順序付けられていないリストからliオブジェクトを取得するためのjQueryセレクタ
- 22. 順序付けされた順序付けられていないSTLコンテナ
- 23. Pythonマルチプロセッシングマップで順序付けられていない結果が返される
- 24. MATLAB copyobjはオブジェクトの順序を逆転させますか?
- 25. ソート私は次のオブジェクト持っている特定の順序
- 26. :私は問題が限度でのfindAllクエリの返されたデータの順序を設定し、オフセットましどのセット返されたデータの順序
- 27. jQueryでネストされた順序付けられていないリストへのオブジェクト
- 28. getElementsByTagName()を使用して返される要素の順序
- 29. Apache HttpAsyncClientはどれくらい安定していますか?
- 30. カサンドラはどれくらい安定していますか?
こんにちは...私たちの両方が同じことをしたようです。 1つの文章を書いて投稿した後、すぐにそれを編集して詳しく説明します。 –
確かに。 あなたの答えは私よりも適切だと思いますが、OPがそれを決定的なものとしてタグ付けしてくれることを願っています。確かに普及した投票を勝ち取っているようだ:) –
最終的な答えとしてタグ付けすることの問題は、もちろん、正確ではないということです! –