Diviser une liste en sous-listes plus petites d'une taille spécifiée en C#
La fonction splitList
originale visait à diviser une liste en listes plus petites, chacune contenant 30 éléments. Cependant, il présentait des défauts entraînant des sous-listes de tailles incohérentes.
Solution améliorée utilisant une méthode d'extension :
Une approche plus robuste consiste à créer une méthode d'extension C# :
<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>
Fonctionnalité expliquée :
Cette méthode d'extension décompose efficacement une liste (source
) en sous-listes d'un chunkSize
donné. Il exploite LINQ :
Indexation et appariement de valeurs : Select((x, i) => new { Index = i, Value = x })
crée un type anonyme contenant l'index et la valeur de chaque élément.
Regroupement par morceau : GroupBy(x => x.Index / chunkSize)
regroupe les éléments en fonction de leur index divisé par le chunkSize
. Cela garantit que les éléments d'un même morceau sont regroupés.
Création de liste : Select(x => x.Select(v => v.Value).ToList())
reconvertit chaque groupe en une liste du type d'élément d'origine.
Liste finale des listes : ToList()
crée la liste finale contenant les sous-listes fragmentées.
Application pratique :
Pour utiliser cette méthode pour créer des sous-listes de taille 30 à partir d'une liste nommée locations
:
<code class="language-csharp">List<List<YourElementType>> chunkedLists = locations.ChunkBy(30);</code>
Exemple illustratif :
Si locations
contient 144 éléments, chunkedLists
contiendra correctement 5 sous-listes de tailles : 30, 30, 30, 30 et 24.
Future amélioration de C# :
Notez que .NET 6 introduit une méthode Chunk
intégrée à cet effet, simplifiant davantage le processus :
<code class="language-csharp">const int PAGE_SIZE = 5; IEnumerable<Movie> chunks = movies.Chunk(PAGE_SIZE);</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!