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

Comment puis-je diviser efficacement une liste en sous-listes plus petites d'une taille spécifique ?

Linda Hamilton
Libérer: 2025-01-18 04:36:10
original
518 Les gens l'ont consulté

How Can I Efficiently Split a List into Smaller Sublists of a Specific Size?

Diviser la liste en sous-unités de taille spécifiée

Cet article résout un problème courant : comment diviser une liste donnée en plusieurs sous-listes plus petites, chacune contenant un nombre prédéfini d'éléments. Les méthodes existantes aboutissent souvent à des tailles de sous-listes plus grandes que prévu.

Pour résoudre ce problème, nous vous recommandons d'utiliser une méthode d'extension capable de diviser la liste source en sous-listes d'une taille spécifiée. Cette méthode s'appelle ChunkBy et exploite les capacités d'agrégation et de projection de LINQ pour obtenir le résultat souhaité.

Veuillez consulter l'extrait de code suivant :

<code class="language-csharp">/// <summary>
/// 列表辅助方法。
/// </summary>
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

Cette méthode parcourt les éléments de la liste source et associe chaque élément à son index. Il regroupe ensuite les éléments en fonction de l'index de l'élément divisé par la taille du bloc. Enfin, il projette le groupe dans une sous-liste contenant les valeurs des éléments.

Par exemple, si une liste de 18 éléments est découpée en sous-listes de 5 éléments chacune, le résultat sera une liste de 4 sous-listes réparties comme suit : 5-5-5-3.

Remarque : Dans .NET 6, les améliorations de LINQ faciliteront le fractionnement, comme le montre l'exemple suivant :

<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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal