Heim >Backend-Entwicklung >C++ >Wie finde ich effizient den Schnittpunkt mehrerer Listen 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!