Intersect peut être utilisé pour trouver des correspondances entre deux collections, comme ceci:
// 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
}
Cependant, ce que je voudrais réaliser est le contraire, je voudrais énumérer éléments d'une collection qui manquent dans l'autre :
// 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
la source
la source
Réponses:
Comme indiqué, si vous souhaitez obtenir 4 comme résultat, vous pouvez faire comme ceci:
Si vous voulez la véritable non-intersection (également à la fois 1 et 4), cela devrait faire l'affaire:
Ce ne sera pas la solution la plus performante, mais pour les petites listes, cela devrait très bien fonctionner.
la source
Vous pouvez utiliser
Ou vous pouvez utiliser
la source
SymmetricExceptWith
est probablement ma méthode préférée.Ce code énumère chaque séquence une seule fois et permet
Select(x => x)
de masquer le résultat pour obtenir une méthode d'extension de style Linq propre. Puisqu'il utiliseHashSet<T>
son runtime, c'estO(n + m)
si les hachages sont bien distribués. Les éléments en double dans l'une ou l'autre liste sont omis.la source
Je pense que vous cherchez peut-être
Except
:Consultez ce lien , ce lien ou Google pour plus d'informations.
la source
Je ne suis pas sûr à 100% de ce que votre méthode NonIntersect est censée faire (en ce qui concerne la théorie des ensembles) - est-ce
B \ A (tout ce qui provient de B ne se produit pas dans A)?
Si oui, vous devriez pouvoir utiliser l'opération Except (B.Except (A)).
la source
la source
array1.NonIntersect (array2);
Un tel opérateur sans intersection n'est pas présent dans Linq, vous devriez le faire
sauf -> union -> sauf
la source
la source