I was looking for a way to have my Dictionary
enumerate its KeyValuePair
in the same order that they were added. Now, Dictionary's documentation clearly states that:
For purposes of enumeration, each item in the dictionary is treated as a
KeyValuePair<TKey, TValue>
structure representing a value and its key. The order in which the items are returned is undefined.
I found out that what I needed was an OrderedDictionary
, but being the sceptic that I am, I decided to try it myself:
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);
}
Output:
OrderedDictionary
key0, value0
key1, value1
key2, value2
...
Dictionary
key0, value0
key1, value1
key2, value2
...
As you can see, both are ordered, and that raise two questions:
In which case does the Dictionary
give a different order that the one in which the values are added?
Does my first foreach
loop assure me to retrieve my KeyValuePair
in the same order, or do I have to use the index?