字典的未记载的功能?

时间:2010-05-11 10:38:59

标签: c# .net .net-3.5 dictionary

Dictionary<string, int> testdic = new Dictionary<string, int>();
testdic.Add("cat", 1);
testdic.Add("dog", 2);
testdic.Add("rat", 3);
testdic.Remove("cat");
testdic.Add("bob", 4);

填写字典,然后删除第一个元素。然后添加一个新元素。鲍勃然后出现在位置1而不是最后,因此它似乎记得删除了条目并重新使用了那个内存空间?

这是否在任何地方都有记录,因为我无法在MSDN上看到它,并且让我感到悲伤,因为我认为它会不断添加到最后。

2 个答案:

答案 0 :(得分:15)

没有记录,因为它只是一个实现细节。

实施可能随时发生变化。 (除非您仔细检查了源代码,否则您甚至无法确定您对当前实现的假设是否准确。)

Dictionary<K,V>类型不保证以任何特定顺序存储其元素,并且您不应该依赖您碰巧观察到的任何未记录的行为。字典是从键到值的映射,不是有序列表。

来自MSDN documentation

  

出于枚举的目的... [t]返回项目的顺序未定义。

答案 1 :(得分:3)

字典未排序,因此您不应该假设任何有关元素顺序的内容。

实施可能会尝试最有效率。这可能意味着当前的实现,展示了您所看到的行为。但是没有记录这样做,所以你不应该依赖它。