Diccionario y diccionario ordenados
Estaba buscando una manera de tener miDictionary
enumerar suKeyValuePair
en el mismo orden en que fueron agregados. Ahora,Documento del diccionario establezca claramente que:
Para propósitos de enumeración, cada artículo en el diccionario es tratado como unKeyValuePair<TKey, TValue>
Estructura que representa un valor y su clave. El orden en el que se devuelven los artículos no está definido.
Descubrí que lo que necesitaba era unaOrderedDictionary
, pero siendo el escéptico que soy, decidí intentarlo yo mismo:
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);
}
Salida:
OrderedDictionary
key0, value0
key1, value1
key2, value2
...
Dictionary
key0, value0
key1, value1
key2, value2
...
Como puede ver, ambos están ordenados, y eso plantea 2 preguntas:
En cuyo caso laDictionary
¿Dar un orden diferente a aquel en el que se agregan los valores? Hace mi primeraforeach
bucle asegurame recuperar miKeyValuePair
¿En el mismo orden, o tengo que usar el índice?