將清單分割成指定大小的子單元
本文解決一個常見問題:如何將給定列表分割成多個較小的子列表,每個子列表包含預先定義數量的元素。現有方法經常導致子清單大小超出預期。
為了解決這個問題,我們建議使用一個擴充方法,該方法能夠將來源清單分割成指定大小的子清單。此方法命名為 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中文網其他相關文章!