Heim >Backend-Entwicklung >C++ >Wie finde ich effizient den Schnittpunkt mehrerer Listen in C#?

Wie finde ich effizient den Schnittpunkt mehrerer Listen in C#?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-15 11:49:47658Durchsuche

How to Efficiently Find the Intersection of Multiple Lists in C#?

Bestimmen der gemeinsamen Elemente über mehrere C#-Listen hinweg

Stellen Sie sich vor, Sie haben eine Sammlung von Listen und müssen die in allen enthaltenen Elemente identifizieren. Zum 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 };</code>

Das gewünschte Ergebnis ist eine Liste, die nur die Elemente enthält, die allen drei Listen gemeinsam sind: {3}.

Nutzung IEnumerable.Intersect()mit einem Listenakkumulator

Eine effektive Methode besteht darin, IEnumerable.Intersect() iterativ mit einer Liste zu verwenden, die als Akkumulator fungiert:

<code class="language-csharp">var intersection = listOfLists.Skip(1)
    .Aggregate(
        new List<int>(listOfLists.First()),
        (list, subList) => list.Intersect(subList).ToList()
    );</code>

Dieser Code beginnt mit der ersten Liste und schneidet sie dann iterativ mit jeder nachfolgenden Liste.

Einsatz IEnumerable.Intersect() mit einem HashSet-Akkumulator

Ein effizienterer Ansatz verwendet einen HashSet als Akkumulator aufgrund seiner optimierten Schnittfähigkeiten:

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

Diese Version verwendet IntersectWith(), eine leistungsfähigere Operation für Mengen. Denken Sie daran, dass listOfLists mindestens eine Liste enthalten muss, damit dies ordnungsgemäß funktioniert.

Beide Techniken bieten effiziente Möglichkeiten, die Schnittmenge mehrerer Listen mithilfe von IEnumerable.Intersect() zu finden. Die HashSet-Methode wird im Allgemeinen wegen ihrer Leistungsvorteile beim Umgang mit größeren Datensätzen bevorzugt.

Das obige ist der detaillierte Inhalt vonWie finde ich effizient den Schnittpunkt mehrerer Listen in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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