This StackOverflow答えは、HashSet
が順序付けされておらず、その項目の列挙順序が定義されておらず、それに依存すべきでないことを完全に記述しています。HashSetは列挙間の順序を保持しますか?
しかし、
これはanouther質問をもたらす:Iべきか、私は2つのsebsequent列挙の間enumeraetion順に頼るべきではないのですか?挿入や削除はありません。
例えば、私はHashSetのにいくつかの項目を追加したと言うことができます:
今HashSet<int> set = new HashSet<int>();
set.Add(1);
set.Add(2);
set.Add(3);
set.Add(4);
set.Add(5);
、私はforeach
経由でこのセットを列挙するとき、私たちは、私はこのシーケンスを受信しましょう:
// Result: 1, 3, 4, 5, 2.
問題は、私が挿入/削除を行わないと、セットを再度列挙しても、その注文は保持されるのでしょうか? いつも同じになりますか?
これが真実であっても、それは文書化されているはずです。そうでないので、私はそれに頼ることはありません。将来のフレームワークの更新でいつでもあなたの顔に壊れてしまう可能性があります。保証された列挙命令が必要な場合は、なぜ地球上でハッシュを使用しますか?それは、あなたの要件を考慮してデータをモデル化するために選択した間違ったデータ構造です。 –
ハッシュセットは基本的に固定スロット順を持つハッシュテーブルなので、セットをまったく変更しなければ反復順序は一定です。あなたはそれに頼るべきですか?いいえ、私はそうは思わない、あなたはそれに頼る必要はありません。 – poke
まあ、私はセットの2つの下位列挙の順序にのみ依存しようとしています、それだけです。私が必要とするデータ構造は、上記の質問に対するO(1)の追加/削除プラスの正解です。何かありますか? – AgentFire