【发布时间】:2013-05-17 15:32:16
【问题描述】:
我正在寻找一种方法让我的Dictionary 以与添加它们相同的顺序枚举其KeyValuePair。现在,Dictionary's documentation 明确指出:
出于枚举的目的,字典中的每个项目都被视为一个
KeyValuePair<TKey, TValue>结构,表示一个值及其键。返回项目的顺序未定义。
我发现我需要的是OrderedDictionary,但作为怀疑论者,我决定自己尝试一下:
OrderedDictionary od = new OrderedDictionary();
Dictionary<String, String> d = new Dictionary<String, String>();
for (int i = 0; i < 10; i++)
{
od.Add("key" + i, "value" + i);
d.Add("key" + i, "value" + i);
}
System.Console.WriteLine("OrderedDictionary");
foreach (DictionaryEntry de in od) {
System.Console.WriteLine(de.Key + ", " + de.Value);
}
System.Console.WriteLine("Dictionary");
foreach (var tmp in d) {
System.Console.WriteLine(tmp.Key + ", " + tmp.Value);
}
输出:
OrderedDictionary
key0, value0
key1, value1
key2, value2
...
Dictionary
key0, value0
key1, value1
key2, value2
...
如您所见,两者都是有序的,这就提出了两个问题:
在哪种情况下,Dictionary 给出的顺序与添加值的顺序不同?
我的第一个foreach 循环是否保证我以相同的顺序检索我的KeyValuePair,还是我必须使用索引?
【问题讨论】:
-
在
Adding 集合时尝试使用随机键并查看差异。 -
仅供参考:@I4V 试过了,没变。
-
字典文档的重要部分是“[t]he order [...] is undefined”,这意味着实现不包含保证顺序的逻辑。换句话说,仅仅因为您现在遵守给定的顺序并不意味着您将始终遵守相同的顺序,所以不要依赖它。
标签: c# dictionary ordereddictionary