首頁 > 後端開發 > C++ > 在 C# 中如何有效地將清單分成特定大小的子清單?

在 C# 中如何有效地將清單分成特定大小的子清單?

DDD
發布: 2025-01-18 04:41:07
原創
725 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板