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
600 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 :

/// <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();
    }
}
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 :

const int PAGE_SIZE = 5;

IEnumerable<Movie[]> chunks = movies.Chunk(PAGE_SIZE);
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!

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