que estaba buscando en algún código de mi compañero de trabajo registró, se veía así:¿Por qué parece que el diccionario .Net está ordenado?
return list.OrderBy(item => item.Order).ToDictionary(item => item.Id);
inmediatamente me dije a mi compañero de trabajo que su código es incorrecto, ya que el Dictionary
es una tabla hash, una organización sin colección clasificada. Él debería usar una colección que preserva el orden u ordenar los artículos más tarde cuando los lee del diccionario con foreach
, dije.
Pero respondió: "No, no, mi código es correcto. Mire: ahora que he agregado OrderBy
, los elementos aparecen en el orden correcto".
Resulta que, en el caso de prueba, tenía razón. Probé con otros datos, ¡pero todavía estaba perfectamente ordenado!
Le dije que no debería confiar en este comportamiento, pero él no está de acuerdo, y tengo problemas para explicar por qué. Además, me interesa saber por qué el orden parece conservarse con tanta frecuencia.
Así que mi pregunta es ... ¿Por qué la Dictionary
, una colección fundamentalmente desordenada, parece tanto que está ordenada?
Dictionary <> ofrece ninguna garantía de que la colección es desordenada . No usa Aleatorio a propósito. Sí, el código es incorrecto. –
sí Justin, este es un duplicado. La respuesta a la pregunta que vinculó es lo que quería. ¿Cómo puede encontrar duplicados tan rápidamente entre tantas preguntas sobre diccionarios? Busqué y no pude encontrarlo. ¡Gracias! –
No lo sé (es por eso que publico esto como comentario) pero me imagino que es lo mismo que en SQL: las filas devueltas por 'SELECT' se devuelven en un orden no especificado a menos que se incluya una cláusula' ORDER BY' . A menudo, especialmente en conjuntos de datos pequeños, las filas se devuelven en el mismo orden en que se insertaron, lo que hace que mucha gente tropiece. (Siempre le digo a las personas que incluyan un 'ORDER BY' si les importa el orden de los resultados. * Podría * funcionar sin él, pero también podría romperse horriblemente.) –