首页 >后端开发 >C++ >如何有效地将列表拆分为特定大小的较小子列表?

如何有效地将列表拆分为特定大小的较小子列表?

Linda Hamilton
Linda Hamilton原创
2025-01-18 04:36:10519浏览

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

将列表分割成指定大小的子单元

本文解决一个常见问题:如何将给定列表分割成多个较小的子列表,每个子列表包含预定义数量的元素。现有方法经常导致子列表大小超出预期。

为了解决这个问题,我们建议使用一个扩展方法,该方法能够将源列表分割成指定大小的子列表。此方法命名为 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn