Heim > Backend-Entwicklung > C++ > Wie kann man mit IEnumerable.Intersect() effizient den Schnittpunkt mehrerer Listen in C# finden?

Wie kann man mit IEnumerable.Intersect() effizient den Schnittpunkt mehrerer Listen in C# finden?

DDD
Freigeben: 2025-01-15 11:21:44
Original
693 Leute haben es durchsucht

How to Efficiently Find the Intersection of Multiple Lists in C# using IEnumerable.Intersect()?

Verwenden Sie IEnumerable.Intersect(), um die Schnittmenge mehrerer Listen in C# effizient zu finden

Im Bereich der Datenanalyse und -verarbeitung ist das Ermitteln der Schnittmenge mehrerer Listen eine sehr häufige Aufgabe. Obwohl es mehrere Möglichkeiten gibt, dieses Problem zu lösen, bietet die Verwendung der Methode IEnumerable.Intersect() eine effiziente Lösung. In diesem Artikel wird erläutert, wie Sie mit dieser Methode die Schnittmenge mehrerer Listen identifizieren und abrufen können.

In C# kann die Methode IEnumerable.Intersect() bei Anwendung auf mehrere Sequenzen verwendet werden, um Elemente abzurufen, die allen Sequenzen gemeinsam sind. Um zu sehen, wie Sie mit dieser Methode die Schnittmenge mehrerer Listen ermitteln, betrachten Sie das folgende Beispiel:

<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 };
var listOfLists = new List<List<int>>() { list1, list2, list3 };

// 预期交集为 List<int>() { 3 };</code>
Nach dem Login kopieren

Um den Schnittpunkt dieser Listen mit IEnumerable.Intersect() zu finden, können wir die folgende Methode verwenden:

<code class="language-csharp">var intersection = listOfLists
    .Skip(1)
    .Aggregate(
        new HashSet<int>(listOfLists.First()),
        (h, e) => { h.IntersectWith(e); return h; }
    );</code>
Nach dem Login kopieren

In dieser Lösung:

  1. Erste Liste überspringen: Wir verwenden zunächst Skip(1), um die erste Liste in listOfLists zu überspringen. Dies ist notwendig, um den Aggregationsprozess mit der zweiten Liste zu starten.
  2. Aggregation: Wir verwenden die Aggregate-Methode, um Schnittpunktergebnisse zu akkumulieren. Aggregationsfunktionen akzeptieren zwei Parameter: einen Startwert und eine Funktion, die für jedes nachfolgende Element ausgeführt wird.
  3. HashSet erstellen: Wir erstellen ein HashSet aus der ersten Liste als anfängliche Schnittmenge. HashSet wird verwendet, weil es doppelte Elemente effektiv identifiziert und schnelle Schnittoperationen unterstützt.
  4. Intersect mit jeder Liste: Für jede nachfolgende Liste rufen wir IntersectWith() auf dem HashSet auf. Diese Methode aktualisiert das HashSet, sodass es nur Elemente enthält, die sowohl dem HashSet als auch der aktuellen Liste gemeinsam sind.
  5. Gibt die Schnittmenge zurück: Nachdem alle Listen verarbeitet wurden, enthält das HashSet die Schnittmenge aller Listen. Wir geben dieses HashSet als Schnittmenge zurück.

Diese Lösung bietet eine präzise und effiziente Möglichkeit, die Schnittmenge mehrerer Listen mithilfe von IEnumerable.Intersect() zu finden. Es nutzt die Optimierungsfunktionen von HashSet, um doppelte Elemente zu verarbeiten und schnelle Schnittoperationen durchzuführen.

Es ist wichtig zu beachten, dass listOfLists immer mindestens eine Liste enthalten sollte, mit der die Schnittmenge initialisiert wird. Wenn die Liste leer ist, wird eine ArgumentNullException geworfen.

Das obige ist der detaillierte Inhalt vonWie kann man mit IEnumerable.Intersect() effizient den Schnittpunkt mehrerer Listen in C# finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage