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:
索引和值配對: Select((x, i) => new { Index = i, Value = x })
建立一個包含每個元素的索引和值的匿名類型。
以區塊分組: GroupBy(x => x.Index / chunkSize)
依照索引除以 chunkSize
將元素分組。 這確保同一塊內的元素被分組在一起。
清單建立: Select(x => x.Select(v => v.Value).ToList())
將每個群組轉換回原始元素類型的清單。
清單的最終清單: 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中文網其他相關文章!