Intersect kann verwendet werden, um Übereinstimmungen zwischen zwei Sammlungen zu finden, z. B.:
// 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
}
Was ich jedoch erreichen möchte, ist das Gegenteil. Ich möchte Elemente aus einer Sammlung auflisten, die in der anderen fehlen :
// 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
quelle
quelle
Antworten:
Wie bereits erwähnt, können Sie Folgendes tun, wenn Sie als Ergebnis 4 erhalten möchten:
Wenn Sie die reale Nicht-Schnittmenge (auch 1 und 4) möchten, sollte dies den Trick tun:
Dies ist nicht die leistungsstärkste Lösung, aber für kleine Listen sollte sie einwandfrei funktionieren.
quelle
Sie können verwenden
Oder Sie können verwenden
quelle
SymmetricExceptWith
ist wahrscheinlich meine Lieblingsmethode.Dieser Code listet jede Sequenz nur einmal auf und
Select(x => x)
versteckt das Ergebnis, um eine saubere Erweiterungsmethode im Linq-Stil zu erhalten. Da esHashSet<T>
seine Laufzeit verwendet, ist,O(n + m)
wenn die Hashes gut verteilt sind. Doppelte Elemente in beiden Listen werden weggelassen.quelle
Ich denke, Sie suchen vielleicht
Except
:Weitere Informationen finden Sie unter diesem Link , diesem Link oder Google.
quelle
Ich bin nicht 100% sicher, was Ihre NonIntersect-Methode tun soll (in Bezug auf die Mengenlehre) - ist es
B \ A (alles von B, was in A nicht vorkommt)?
Wenn ja, sollten Sie in der Lage sein, die Operation Except (B.Except (A)) zu verwenden.
quelle
quelle
array1.NonIntersect (array2);
Ein solcher Operator, der keinen Schnittpunkt aufweist, ist in Linq nicht vorhanden
außer -> Vereinigung -> außer
quelle
quelle