Maison > développement back-end > C++ > Comment puis-je regrouper efficacement une liste en sous-listes d'une taille spécifique en C# ?

Comment puis-je regrouper efficacement une liste en sous-listes d'une taille spécifique en C# ?

DDD
Libérer: 2025-01-18 04:41:07
original
725 Les gens l'ont consulté

How Can I Efficiently Chunk a List into Sublists of a Specific Size in C#?

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>
Copier après la connexion

Fonctionnalité expliquée :

Cette méthode d'extension décompose efficacement une liste (source) en sous-listes d'un chunkSize donné. Il exploite LINQ :

  1. 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.

  2. 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.

  3. 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.

  4. 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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal