Heim >Backend-Entwicklung >C++ >Wie kann ich eine Liste in C# effizient in Unterlisten einer bestimmten Größe unterteilen?
Aufteilen einer Liste in kleinere Unterlisten einer bestimmten Größe in C#
Die ursprüngliche Funktion splitList
zielte darauf ab, eine Liste in kleinere Listen mit jeweils 30 Elementen aufzuteilen. Es gab jedoch Mängel, die zu Unterlisten mit inkonsistenter Größe führten.
Verbesserte Lösung mithilfe einer Erweiterungsmethode:
Ein robusterer Ansatz besteht darin, eine C#-Erweiterungsmethode zu erstellen:
<code class="language-csharp">public static class ListExtensions { public static List<List<T>> ChunkBy<T>(this List<T> source, int chunkSize) { return source .Select((x, i) => new { Index = i, Value = x }) .GroupBy(x => x.Index / chunkSize) .Select(x => x.Select(v => v.Value).ToList()) .ToList(); } }</code>
Funktionalität erklärt:
Diese Erweiterungsmethode unterteilt eine Liste (source
) effizient in Unterlisten eines bestimmten chunkSize
. Es nutzt LINQ:
Indizierung und Wertepaarung: Select((x, i) => new { Index = i, Value = x })
erstellt einen anonymen Typ, der den Index und den Wert jedes Elements enthält.
Gruppierung nach Chunk: GroupBy(x => x.Index / chunkSize)
gruppiert Elemente basierend auf ihrem Index geteilt durch chunkSize
. Dadurch wird sichergestellt, dass Elemente innerhalb desselben Chunks gruppiert werden.
Listenerstellung: Select(x => x.Select(v => v.Value).ToList())
wandelt jede Gruppe zurück in eine Liste des ursprünglichen Elementtyps.
Endgültige Liste der Listen: ToList()
erstellt die endgültige Liste mit den unterteilten Unterlisten.
Praktische Anwendung:
Um diese Methode zu verwenden, um Unterlisten der Größe 30 aus einer Liste mit dem Namen locations
zu erstellen:
<code class="language-csharp">List<List<YourElementType>> chunkedLists = locations.ChunkBy(30);</code>
Anschauliches Beispiel:
Wenn locations
144 Elemente enthält, enthält chunkedLists
korrekterweise 5 Unterlisten mit den Größen 30, 30, 30, 30 und 24.
Zukünftige C#-Verbesserung:
Beachten Sie, dass .NET 6 zu diesem Zweck eine integrierte Chunk
-Methode einführt, die den Prozess weiter vereinfacht:
<code class="language-csharp">const int PAGE_SIZE = 5; IEnumerable<Movie> chunks = movies.Chunk(PAGE_SIZE);</code>
Das obige ist der detaillierte Inhalt vonWie kann ich eine Liste in C# effizient in Unterlisten einer bestimmten Größe unterteilen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!