2

DictionaryusingAddにエントリを追加するとKeyValuePair、その最後にが追加されます。このようにプリペンドしたいので、繰り返してみるとKeyValuePair最初のアイテムです。

でそれを行う方法はありますか、それともDictionary私が構築するList<KeyValuePair<TKey, TValue>>必要がありますか、それともより良い提案がありますか?

編集:私はで列挙に取り組むことができると思いましたDictionary、それは私ができないようです。

List<KeyValuePair<TKey, TValue>>あまり実用的ではないもので試してみました。

4

5 に答える 5

12

クラスには順序のDictionary概念がありません-。への位置インデックスはありませんDictionary

辞書で位置インデックスを使用する必要がある場合OrderedDictionaryは、名前空間のクラスを確認してください。System.Collections.Specialized

于 2012-05-25T13:02:45.943 に答える
4

OrderedDictionaryを探していると思います。

于 2012-05-25T13:02:55.537 に答える
3

を使用しOrderedDictionaryます。

キーまたはインデックスからアクセスできるキーと値のペアのコレクションを表します。キー値paitを目的のインデックスに挿入できます。

于 2012-05-25T13:04:47.267 に答える
3

順序を維持しようとしている場合はDictionary、使用したいコレクションではありません(順序の概念がありません)。

OrderedDictionary索引付き辞書が必要な場合に役立つコレクションがあります。

SortedDictionaryキー値に基づいて追加した値を並べ替えるコレクションもあります。

于 2012-05-25T13:05:17.487 に答える
0

Dictionary<,>公式には、キーと値のペアを繰り返し処理した場合に、キーと値のペアがどのような順序で出力されるかを知ることはできません(foreachそれにより、を呼び出しGetEnumerator()ます)。そして確かに、Remove辞書からいくつかのアイテムがあり、後でAdd他のいくつかのアイテムがある場合foreach、コレクションを通過するときに、新しいアイテムは、反復「リスト」の最後ではなく、削除されたアイテムのスペースにあります。

しかし:あなたがあなたDeleteから決してあなたがいないことを知っているならDictionary<,>、列挙はそれらが追加された順序でアイテムを生み出すように見えます。これが常に機能するという保証はありませんが、現在の実装では機能するようです。

だから、あえてこれに頼るなら、あなたはただ言うことができます

foreach (var keyValuePair in myDict.Reverse())
{
  ...

このReverseメソッドはLINQの一部です(needs using System.Linq)。

于 2012-05-25T13:54:11.767 に答える