字典项目顺序

时间:2013-08-19 09:02:04

标签: c# dictionary

我使用Dictionary<string, Item>来存储自己的物品 使用字典的原因是密钥是唯一的,访问速度很快。

在大多数情况下,我只使用dicionary来访问单个项目。但在一个案例中,我必须遍历字典 - 在这里我需要按顺序添加项目。

我只知道字典在内部使用哈希表,但我不知道它是如何组织的。

问题:
字典中的项目是否在添加时按顺序排列? 添加或删除项目时,订单会发生什么变化?

4 个答案:

答案 0 :(得分:4)

根本没有订购。字典中元素的顺序是非确定性的。

MSDN: "The order in which the items are returned is undefined."

您可以使用OrderedDictionary代替通过索引访问项目。或者,如果您希望按键排序,可以使用SortedDictionary

更新 Why is a dictionary not ordered by nature

答案 1 :(得分:1)

如果您查看the msdn pages,您会发现(第一个问题)

  

未定义项目的返回顺序。

第二个问题的答案是它是由哈希表实现的。

我不可能在不知道您的实际要求的情况下推荐更好的行动方案。但是一旦你开始搞乱多个键并对命令进行排序,你就会失去你的O(1)检索。

答案 2 :(得分:0)

字典根本没有订购,所以你不能依赖那里的价值观。您可以尝试使用OrderedDictionary。如果您更喜欢通用的,请检查以下链接:

No generic implementation of OrderedDictionary?

答案 3 :(得分:0)

不,他们没有订购,因为您可以阅读Microsoft的library

  

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