我正在尋找一種方法讓我的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