2010-03-19 11 views

Respuesta

16

El comportamiento definido de Enumerable.Distinct es que le proporcione una colección desordenada (Documentation).

Sin embargo, la actual aplicación de distintas en LINQ a Objetos preservará el orden. Sin embargo, esto no está garantizado para otros proveedores de LINQ y no se debe confiar en el comportamiento.

+0

lo que a veces volverá '{3, 2, 4, 10, 6, 7, 1}' (por ejemplo) a veces en lugar de en el orden en que se encontró los artículos? ¿Quizás tengas algún enlace para esto o un código de ejemplo tal vez? – Cornelius

+0

@ Cornelius ver mi respuesta actualizada – JaredPar

+0

Respuesta similar para Queryable.Distinct (devuelve una secuencia desordenada) ver [DISTINCT() y el problema ORDERBY] (// stackoverflow.com/a/12429107) –

0

En general: no, pero en su caso (con una matriz int): probablemente sí. Apuesto a que solo están enumerando la colección y haciendo caso omiso de los elementos que ya han encontrado. Pero no cuente con ese comportamiento en diferentes versiones de .NET o para diferentes tipos de colecciones.

Como JaredPar señaló en su respuesta, el resultado se especifica como desordenado. Si desea realizar un pedido específico, debe ordenarlos posteriormente utilizando cualquier algoritmo que tenga sentido en su caso.

2

Creo que la palabra "desordenada" significa el mismo orden de la secuencia original.
Por lo tanto, la persona que llama debe decidir si desea ordenar el resultado o no.

+3

Usted piensa que la palabra "desordenado" significa "en un orden específico"? ¡Eso es algo extraño de pensar! :-) "Desordenado" significa "sin ningún orden en particular". –

+0

@Eric: Espero que lean este comentario. Lo que quiero decir es (y creo que implícito) que el orden de la secuencia de valor de retorno no se modifica (es decir, el orden de la secuencia devuelta se mantiene como el de la secuencia pasada). ¿Dónde he dicho "desordenado" en un orden específico? Por lo tanto, como por caso anterior 'int [] nums = {2, 3, 3, 4, 2, 1, 6, 7, 10};', la secuencia devuelto no va a clasificar el valor de retorno y volverá '2, 3,4,1,6, 7, 10'. – shahkalpesh

+3

Y ese orden, el orden en que aparece la secuencia original, es un pedido específico, uno de los millones de posibles pedidos. La documentación del método no garantiza que este orden específico sea el elegido. En * practice * se elige este orden específico. Pero por "desordenado" la documentación significa que * cualquier orden * puede ser elegida por la implementación. A veces es más eficiente no conservar el orden original. –

Cuestiones relacionadas