Intersect se puede usar para encontrar coincidencias entre dos colecciones, así:
// Assign two arrays.
int[] array1 = { 1, 2, 3 };
int[] array2 = { 2, 3, 4 };
// Call Intersect extension method.
var intersect = array1.Intersect(array2);
// Write intersection to screen.
foreach (int value in intersect)
{
Console.WriteLine(value); // Output: 2, 3
}
Sin embargo, lo que me gustaría lograr es lo contrario, me gustaría enumerar los elementos de una colección que faltan en la otra :
// Assign two arrays.
int[] array1 = { 1, 2, 3 };
int[] array2 = { 2, 3, 4 };
// Call "NonIntersect" extension method.
var intersect = array1.NonIntersect(array2); // I've made up the NonIntersect method
// Write intersection to screen.
foreach (int value in intersect)
{
Console.WriteLine(value); // Output: 4
}
c#
.net
collections
intersect
Peter Bridger
fuente
fuente
Respuestas:
Como se indicó, si desea obtener 4 como resultado, puede hacer lo siguiente:
Si desea la no intersección real (también 1 y 4), entonces esto debería ser el truco:
Esta no será la solución más eficiente, pero para listas pequeñas debería funcionar bien.
fuente
Puedes usar
O puedes usar
fuente
SymmetricExceptWith
Es probablemente mi método favorito.Este código enumera cada secuencia solo una vez y se usa
Select(x => x)
para ocultar el resultado para obtener un método de extensión de estilo Linq limpio. Ya que usaHashSet<T>
su tiempo de ejecución esO(n + m)
si los hashes están bien distribuidos. Se omiten elementos duplicados en cualquiera de las listas.fuente
Creo que podrías estar buscando
Except
:Consulte este enlace , este enlace o Google, para obtener más información.
fuente
No estoy 100% seguro de lo que se supone que debe hacer su método NonIntersect (con respecto a la teoría de conjuntos): ¿es
B \ A (todo lo de B que no ocurre en A)?
En caso afirmativo, debería poder utilizar la operación Excepto (B.Excepto (A)).
fuente
fuente
array1.NonIntersect (array2);
No intersector dicho operador no está presente en Linq que debe hacer
excepto -> unión -> excepto
fuente
fuente