0

新しいメンバーの入場を登録することDictionaryと、入場の時間を検討してください。

Dictionary<string, DateTime> members = new Dictionary<string, DateTime>();
members.Add("Bob", DateTimeNow);
Thread.Sleep(1000);
members.Add("Joe", DateTimeNow);
Thread.Sleep(1000);
members.Add("Susan", DateTimeNow);
Thread.Sleep(1000);
// Now Joe exits
members.Remove("Joe");
// Then Mike enters
members.Add("Mike", DateTimeNow);

ここで問題は、 のMike場所ですDictionary。彼はの最後に追加されますか、Dictionaryそれとも空の場所を埋めますかSusan(via インデックスを反復処理foreachまたはアクセスする場合Dictionary)? 動作は常に保証されていますか?

4

3 に答える 3

3

Dictionary は順序付けられていないため、キーを反復処理した場合に返される順序について推論することはできません。

MSDN サイトが教えてくれるように、Dictionary はhash tableとして実装され、次のようになります。

アイテムが返される順序は定義されていません。

定義された順序でキーを反復処理する場合は、 SortedDictionaryを使用する必要があります。

于 2011-05-21T19:22:44.553 に答える
1

aへのアクセスは経由ではなく経由Dictionaryで行われます-したがって、それ自体の質問はあまり意味がありません。 すべての回答がすでに述べたように-aには順序がなく、 (Wikiページ-時間をかけて読む)を介して実装されますkeyindex
DictionaryHashtable

それ自体は、維持するデータの量と独自の実装に応じて拡張および圧縮Dictionaryできますが、そのような質問に煩わされる必要がないような豊富なフレームワークを使用する場合は、それが自動的に行われます。興味がある場合は、WIKIページのセクションを読んで、実装について学ぶことができます。.NETDynamic Resizing

于 2011-05-21T19:31:26.763 に答える
1

Dictionary が表すハッシュテーブルには、順序の概念が定義されていません。アイテムが特定の順序になっていることに決して依存することはできません。この動作は保証されていません。ディクショナリは、キーによって特定の項目にすばやくアクセスするために使用されます。

ドキュメントからの引用:

KeyValuePair<TKey, TValue>列挙のために、ディクショナリ内の各項目は、値とそのキーを表す構造体として扱われ ます。アイテムが返される順序は定義されていません。

于 2011-05-21T19:22:58.593 に答える