OrdenadoDicionário e Dicionário
Eu estava procurando uma maneira de ter meuDictionary
enumerar suaKeyValuePair
na mesma ordem em que foram adicionados. Agora,Doc do dicionário afirmar claramente que:
Para fins de enumeração, cada item no dicionário é tratado como umKeyValuePair<TKey, TValue>
estrutura representando um valor e sua chave. A ordem em que os itens são retornados é indefinida.
Eu descobri que o que eu precisava era de umOrderedDictionary
, mas sendo o cético que sou, decidi tentar por mim mesmo:
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);
}
Saída:
OrderedDictionary
key0, value0
key1, value1
key2, value2
...
Dictionary
key0, value0
key1, value1
key2, value2
...
Como você pode ver, ambos são ordenados, e isso levanta 2 questões:
Em que casos oDictionary
dar uma ordem diferente daquela em que os valores são adicionados? Meu primeiroforeach
loop me assegurar para recuperar o meuKeyValuePair
na mesma ordem, ou eu tenho que usar o índice?