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>
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>
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!