簡體   English   中英

如何在 C# 中使用 IGrouping 枚舉

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM