我正在寻找一种方法让我的Dictionary
按照它们添加的顺序枚举它的KeyValuePair
。现在,Dictionary's doc明确指出:OrderedDictionary and Dictionary
对于枚举的目的,字典中的每个项目被作为表示一个值及其键中
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
,还是必须使用索引?
尝试使用*随机*键,在'Add'ing到集合,看到了差距。 – I4V
仅供参考: @ I4V尝试过,并没有改变。 – DeadlyJesus