2009-02-25 9 views
11

Estoy usando un Dictionary<TKey, TValue> y estoy obteniendo un comportamiento extraño, aunque algo comprensible en mis pruebas.¿El diccionario <TKey, TValue> ordena por las teclas de forma predeterminada?

No importa el orden en que agregue entradas al diccionario cuando llamo al Dictionary.Keys las claves se devuelven en el orden especificado por la implementación IComparable<T> para el tipo de clave.

Esto es bueno para mí, ya que quiero obtenerlos en ese orden de todos modos, pero no puedo encontrar en ningún lugar que especifique que deben y siempre serán devueltos de esta manera. Por lo tanto, no sé si confiar en que siempre sea así o hacer una clasificación (potencialmente redundante) en el List<T> que estoy creando.

¿Puedo confiar en este comportamiento o no?

Respuesta

24

No puede confiar en este comportamiento. Esto es solo una coincidencia que probablemente se deba al tamaño de la muestra o a la implementación de GetHashCode. Una vez que agregue suficientes elementos en la tabla y forzar los refueños suficientes, las claves no se ordenarán.

MSDN dice explícitamente el orden de las claves es no especificado (http://msdn.microsoft.com/en-us/library/yt2fy5zk.aspx)

16

Usted está buscando SortedDictionary<K,V>. Diccionario <K,V> utiliza hash, que con conjuntos pequeños puede parecer superficialmente similar a la clasificación.

Cuestiones relacionadas