utilizar el grupo por la materia, el rendimiento de estos métodos son razonablemente buena. La única preocupación es la gran sobrecarga de memoria si está trabajando con grandes conjuntos de datos.
from g in (from x in data group x by x)
where g.Count() > 1
select g.Key;
-OR si prefieren los métodos de extensión
data.GroupBy(x => x)
.Where(x => x.Count() > 1)
.Select(x => x.Key)
Dónde Count() == 1
que es sus artículos distintos y en el Count() > 1
que es uno o más elementos duplicados.
Desde LINQ es una especie de perezoso, si no desea volver a evaluar su cálculo se puede hacer esto:
var g = (from x in data group x by x).ToList(); // grouping result
// duplicates
from x in g
where x.Count() > 1
select x.Key;
// distinct
from x in g
where x.Count() == 1
select x.Key;
Al crear la agrupación de una serie de conjuntos se crearán. Suponiendo que se trata de un conjunto con O(1)
, la inserción del tiempo de ejecución del grupo por aproximación es O(n)
. El costo incurrido para cada operación es algo alto, pero debería equivaler a un desempeño casi lineal.
Buena solución con el conjunto de hash. Estaba pensando en esa línea, pero claramente todavía no me desperté ... – Noldorin
¡Buena solución con el juego de hash hecho! ¡Sabía que podía hacerlo de esa manera, pero no sabía que era posible extender el lenguaje de esa manera! – user375049