Heim > Backend-Entwicklung > C++ > Wie finde ich den Schnittpunkt mehrerer Listen mit IEnumerable.Intersect()?

Wie finde ich den Schnittpunkt mehrerer Listen mit IEnumerable.Intersect()?

Patricia Arquette
Freigeben: 2025-01-15 11:36:48
Original
705 Leute haben es durchsucht

How to Find the Intersection of Multiple Lists Using IEnumerable.Intersect()?

Verwenden Sie IEnumerable.Intersect(), um die Schnittmenge mehrerer Listen zu finden

Mit der Methode IEnumerable.Intersect() in C# können Sie gemeinsame Elemente in zwei Sequenzen finden. Was aber, wenn Sie über mehrere Listen verfügen und Elemente identifizieren möchten, die in allen Listen vorhanden sind?

Frage:

Gegeben eine Liste von Listen mit ganzen Zahlen:

<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 };</code>
Nach dem Login kopieren

Wie verwende ich IEnumerable.Intersect(), um die Schnittmenge dieser Listen zu finden und das Ergebnis List() { 3 } zu erhalten?

Lösung 1: HashSet-Aggregation

<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

Diese Lösung verwendet die Aggregate()-Methode, um ein HashSet zu akkumulieren, das die Schnittmenge von Listen darstellt. Die Skip(1)-Methode stellt sicher, dass die erste Liste in listOfLists als Anfangswert für das HashSet verwendet wird.

Lösung 2: HashSet-Iteration

<code class="language-csharp">var intersection = new HashSet<int>(listOfLists.First());

foreach (var list in listOfLists.Skip(1))
{
    var intersect = new HashSet<int>(intersection);
    intersection.IntersectWith(list);
}</code>
Nach dem Login kopieren

Diese Lösung verwendet ebenfalls ein HashSet, iteriert jedoch über die verbleibenden Listen und erstellt für jede Kreuzung ein neues HashSet.

Leistungsaspekte:

Leistungsbenchmarks zeigen, dass die HashSet-Lösung in den meisten Fällen die Verwendung einer Liste übertrifft. Der Leistungsunterschied zwischen der foreach-Methode und der Aggregate-Methode ist vernachlässigbar.

Das obige ist der detaillierte Inhalt vonWie finde ich den Schnittpunkt mehrerer Listen mit IEnumerable.Intersect()?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage