[英]How to use IGrouping enumeration in C#
public static class ListExtensions
{
public static List<List<T>> ChunkBy<T>(this List<T> source, int chunkSize) => source.Select((x, i) => new
{
Index = i,
Value = x
})
.GroupBy(x => x.Index / chunkSize)
.Select<IGrouping<int, \u003C\u003Ef__AnonymousType0<int, T>>, List<T>>(x => x.Select(v => v.Value).ToList<T>()).ToList<List<T>>();
如果你在 .Net 6 上,你應該使用內置的Enumerable.Chunk方法。 如果您使用的是舊版本,我建議使用避免使用 GroupBy 來分塊列表的實現,例如:
public static IEnumerable<List<T>> Chunk<T>(this IEnumerable<T> self, int chunkSize)
{
var list = new List<T>(chunkSize);
foreach (var item in self)
{
list.Add(item);
if (list.Count >= chunkSize)
{
yield return list;
list = new List<T>(chunkSize);
}
}
if (list.Count > 0)
{
yield return list;
}
}
雖然代碼有點多,但它適用於任何 IEnumerable,而不僅僅是 List。 它也將被延遲評估,因此即使源序列是無限的也可以正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.