考虑在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
进行迭代或访问Dictionary
via index)?这种行为是否一直保证?
答案 0 :(得分:3)
字典不是有序的,所以如果你遍历键,你就不能对它们返回的顺序做任何推理。
正如MSDN网站告诉我们的那样,Dictionary实现为hash table,并且:
项目的顺序 返回是未定义的。
如果要按定义的顺序迭代键,则应使用SortedDictionary。
答案 1 :(得分:1)
没有为Dictionary表示的哈希表定义顺序的概念。您永远不能依赖特定订单中的商品。这种行为无法保证。字典用于按键快速访问给定项目。
的引用为了枚举,每个项目 在字典中被视为一个
KeyValuePair<TKey, TValue>
结构 代表一个值及其关键。该 退货的订单 未定义。
答案 2 :(得分:1)
访问Dictionary
是通过key
而不是index
完成的 - 所以自己的问题意味着更少。
由于已经说明了所有答案 - Dictionary
没有订单,并且是通过Hashtable
(Wiki Page实施的 - 请花时间阅读)
Dictionary
它自己可以 展开 和 压缩 ,具体取决于数据量维护和自己的实现,但是当使用像.NET
这样的丰富框架时,您不需要为这个问题烦恼,它就是为您完成的。您可以阅读WIKI页面中的Dynamic Resizing
部分,了解您感兴趣的实施情况。