我刚刚看到这种行为,我对此感到有点惊讶......
如果我向字典中添加 3 或 4 个元素,然后执行“For Each”来获取所有键,它们将以我添加的顺序出现。
这让我感到惊讶的原因是字典内部应该是一个哈希表,所以我希望事情能以任何顺序出现(按键的哈希排序,对吧?)
我在这里缺少什么?
这是我可以信赖的行为吗?
编辑:好的,我已经想到了很多原因might发生(例如条目的单独列表,这是否是巧合,等等)。
我的问题是,有人吗know这到底是如何运作的?
如果您在 3.5 类库上使用 .NET Reflector,您可以看到 Dictionary 的实现实际上将项目存储在数组中(根据需要调整大小),并将索引散列到该数组中。当获取键时,它完全忽略哈希表并迭代项目数组。因此,您将看到您所描述的行为,因为新项目被添加到数组末尾。看起来如果您执行以下操作:
add 1
add 2
add 3
add 4
remove 2
add 5
你会得到 1 5 3 4 因为它重用了空槽。
值得注意的是,就像许多其他人一样,您不能指望在未来(或过去)的版本中出现这种行为。如果你想对你的字典进行排序,那么有一个排序字典 http://msdn.microsoft.com/en-us/library/f7fta44c.aspx为此目的的类。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)