首頁 >後端開發 >C++ >如何有效地將清單拆分為指定大小的較小子清單?

如何有效地將清單拆分為指定大小的較小子清單?

DDD
DDD原創
2025-01-18 04:26:08488瀏覽

How to Efficiently Split a List into Smaller Sublists of a Defined Size?

將清單分割成指定大小的子清單

本文介紹如何將列表分割成指定大小的子列表,並提供兩種高效方法。

方法一:使用擴充方法

以下程式碼展示如何透過擴充方法實現清單分割:

<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>

使用方法:直接呼叫清單的ChunkBy方法,傳入所需的區塊大小作為參數。例如,將包含18個元素的列表分割成5個元素的區塊:

<code class="language-csharp">List<List<int>> chunks = myList.ChunkBy(5);</code>

結果將會得到一個包含四個子列表的列表,每個子列表包含五個元素。

方法二:使用循環

另一個方法是使用簡單的循環:

<code class="language-csharp">public static List<List<T>> SplitList<T>(List<T> list, int chunkSize)
{
    List<List<T>> chunks = new List<List<T>>();

    while (list.Count > 0)
    {
        List<T> chunk = new List<T>(chunkSize);
        for (int i = 0; i < chunkSize && list.Count > 0; i++)
        {
            chunk.Add(list[0]);
            list.RemoveAt(0);
        }
        chunks.Add(chunk);
    }

    return chunks;
}</code>

此方法接受列表和所需的區塊大小作為參數,建立一個新的列表列表,並迭代輸入列表,將chunkSize個元素添加到每個新的子列表中,直到輸入列表為空。

兩種方法都能有效地將清單分割成指定大小的子清單。選擇最符合您特定需求和編碼風格的方法。

以上是如何有效地將清單拆分為指定大小的較小子清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn