0

考虑在a中注册新成员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(如果我们迭代foreach或访问Dictionaryvia 索引)?行为是否始终得到保证?

4

3 回答 3

3

字典没有顺序,因此如果您遍历键,您无法对它们返回的顺序进行任何推理。

正如 MSDN 网站告诉我们的,Dictionary 是作为哈希表实现的,并且:

返回项目的顺序未定义。

如果要以定义的顺序遍历键,则应使用SortedDictionary 。

于 2011-05-21T19:22:44.553 回答
1

没有为 Dictionary 所代表的哈希表定义顺序的概念。您永远不能依赖特定顺序的项目。不保证此行为。字典用于通过键快速访问给定项目。

文档中引用:

出于枚举的目的,字典中的每个项目都被视为 KeyValuePair<TKey, TValue>表示值及其键的结构。返回项目的顺序未定义。

于 2011-05-21T19:22:58.593 回答
1

访问 aDictionary是通过key而不是通过index- 所以它本身的问题意义不大。
正如所有答案已经说明的那样 - aDictionary没有顺序,并且是通过 a 实现的Hashtable维基页面- 花时间阅读它)

Dictionary它自己可以根据它维护的数据量和它自己的实现来扩展压缩,但是当使用像.NET你这样的丰富框架时,不需要为这个问题而烦恼,它已经为你完成了。如果您感兴趣,您可以阅读Dynamic ResizingWIKI 页面中的部分以了解实施。

于 2011-05-21T19:31:26.763 回答