15

があり、それぞれとエントリを特定の順序でDictionary追加するとします。さて、後でエントリが追加されたのと同じ順序で これを繰り返すことができるようにしたい場合、それはこの辞書の単純なループで取得する順序ですか? keyvalue
Dictionaryforeach

Listそうでない場合は、どうすればそれができるかを聞いてうれしく思います。これは代わりに簡単に実行できることはわかっていますが、Dictionaryしたくありません。

ありがとう

4

4 に答える 4

19

通常Dictionaryはアイテムの順序を保証するものではありません。

OrderedDictionary追加された場所で注文アイテムを維持する場合に必要です。.Net Frameworkにはこのクラスの汎用バージョンがないため、型安全性を放棄するか、他の実装を見つける必要があることに注意してください(https://www.codeproject.com/Articles/18615/OrderedDictionary-TA-generic -Tim Sによって提案されたIOの実装)。

または、O(log n)ルックアップに問題がなく、キーを並べ替える必要がある場合-SortedDictionary

于 2012-12-21T22:58:39.260 に答える
4

あなたが望むものは:http Queue<T>//msdn.microsoft.com/en-us/library/7977ey2c.aspxのように聞こえます

KeyValuePair<T, U>アイテムを希望の順序で追加すると、foreach先入れ先出しの順序になります。

于 2012-12-21T23:08:11.387 に答える
3

Dictionarysはハッシュテーブルです。つまり、ペアを反復処理すると、追加したのと同じ順序でペアが返されることを保証できません。

各ペアはであるため、必要に応じて、追加した順序で反復KeyValuePair<T_K, T_V>できるようにすることができます。List<KeyValuePair<string, string>>

于 2012-12-21T22:52:59.297 に答える
2

辞書の内部ソートは、使用されるハッシュ関数によって異なります。ただし、データの並べ替えられたビューが必要な場合は、を使用できますEnumerable.OrderBy

于 2012-12-21T22:53:41.233 に答える