将列表分割成指定大小的子单元
本文解决一个常见问题:如何将给定列表分割成多个较小的子列表,每个子列表包含预定义数量的元素。现有方法经常导致子列表大小超出预期。
为了解决这个问题,我们建议使用一个扩展方法,该方法能够将源列表分割成指定大小的子列表。此方法命名为 ChunkBy
,它利用 LINQ 的聚合和投影功能来实现所需结果。
请看以下代码片段:
<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>
此方法迭代遍历源列表的元素,并将每个元素与其索引关联。然后,它根据元素索引除以块大小的结果对元素进行分组。最后,它将组投影成包含元素值的子列表。
例如,如果一个包含 18 个项目的列表被分割成每个包含 5 个元素的子列表,则结果将是一个包含 4 个子列表的列表,其分布如下:5-5-5-3。
注意: 在 .NET 6 中,LINQ 的改进将使分割操作更加简单,如下例所示:
<code class="language-csharp">const int PAGE_SIZE = 5; IEnumerable<Movie[]> chunks = movies.Chunk(PAGE_SIZE);</code>
以上是如何有效地将列表拆分为特定大小的较小子列表?的详细内容。更多信息请关注PHP中文网其他相关文章!