首页 >后端开发 >C++ >在 C# 中如何有效地将列表分成特定大小的子列表?

在 C# 中如何有效地将列表分成特定大小的子列表?

DDD
DDD原创
2025-01-18 04:41:07727浏览

How Can I Efficiently Chunk a List into Sublists of a Specific Size in C#?

C# 中将列表划分为指定大小的较小子列表

最初的 splitList 函数旨在将列表分解为更小的列表,每个列表包含 30 个元素。 然而,它有缺陷,导致子列表大小不一致。

使用扩展方法改进的解决方案:

更强大的方法涉及创建 C# 扩展方法:

<code class="language-csharp">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>

功能解释:

此扩展方法有效地将列表 (source) 分成给定 chunkSize 的子列表。 它利用 LINQ:

  1. 索引和值配对: Select((x, i) => new { Index = i, Value = x }) 创建一个包含每个元素的索引和值的匿名类型。

  2. 按块分组: GroupBy(x => x.Index / chunkSize) 根据索引除以 chunkSize 对元素进行分组。 这确保同一块内的元素被分组在一起。

  3. 列表创建: Select(x => x.Select(v => v.Value).ToList()) 将每个组转换回原始元素类型的列表。

  4. 列表的最终列表: ToList() 创建包含分块子列表的最终列表。

实际应用:

要使用此方法从名为 locations 的列表创建大小为 30 的子列表:

<code class="language-csharp">List<List<YourElementType>> chunkedLists = locations.ChunkBy(30);</code>

示例:

如果 locations 包含 144 个元素,chunkedLists 将正确包含 5 个大小为:30、30、30、30 和 24 的子列表。

未来 C# 增强:

请注意,.NET 6 为此引入了内置的 Chunk 方法,进一步简化了流程:

<code class="language-csharp">const int PAGE_SIZE = 5;
IEnumerable<Movie> chunks = movies.Chunk(PAGE_SIZE);</code>

以上是在 C# 中如何有效地将列表分成特定大小的子列表?的详细内容。更多信息请关注PHP中文网其他相关文章!

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