首頁 >後端開發 >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