Ermitteln Sie effizient die Schnittmenge mehrerer Listen: IEnumerable.Intersect()-Methode
Bei der Programmierung ist die Bestimmung der Schnittmenge mehrerer Listen ein häufiges Problem. Dieses Problem kann mithilfe der leistungsstarken IEnumerable.Intersect()
-Methode von .NET leicht gelöst werden.
Nehmen Sie das folgende Szenario an: Wir haben eine Liste mit Listen und möchten Elemente finden, die in allen Listen vorhanden sind. Beispiel: Gegeben sind drei Listen:
<code class="language-csharp">var list1 = new List<int>() { 1, 2, 3 }; var list2 = new List<int>() { 2, 3, 4 }; var list3 = new List<int>() { 3, 4, 5 };</code>
Der erwartete Schnittpunkt ist die Liste:
<code class="language-csharp">{ 3 }</code>
Dieser Schnittpunkt kann mit IEnumerable.Intersect()
effizient berechnet werden. Es ist jedoch wichtig zu beachten, dass diese Methode erfordert, dass wir ein IEnumerable<T>
als Eingabe bereitstellen.
Um diese Anforderung zu erfüllen, können wir mehrere IEnumerable<T>
-Objekte in einer einzigen Liste zusammenfassen, wie in der folgenden Lösung gezeigt:
<code class="language-csharp">var listOfLists = new List<List<int>>() { list1, list2, list3 }; var intersection = listOfLists .Skip(1) .Aggregate( new HashSet<int>(listOfLists.First()), (h, e) => { h.IntersectWith(e); return h; } );</code>
Dieser Code durchläuft die Listen in listOfLists
(mit Ausnahme der ersten Liste) und aktualisiert HashSet.IntersectWith()
mit dem Schnittpunkt von HashSet
mit der aktuellen Liste. Dieser effiziente Prozess führt letztendlich zum gewünschten Schnittpunkt, der in der Variablen intersection
gespeichert ist.
Diese Lösung nutzt effektiv HashSet
, das für schnelle Kreuzungsvorgänge optimiert ist. Darüber hinaus ist der Code sauber und prägnant, was ihn ideal für diese Aufgabe macht.
Das obige ist der detaillierte Inhalt vonWie kann IEnumerable.Intersect() effizient den Schnittpunkt mehrerer Listen finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!