zoukankan      html  css  js  c++  java
  • C# linq 如何分批循环遍历IEnumerable?

    我正在开发具有“IEnumerable用户”的c#程序,其中存储了400万用户的ID。我需要遍历Ienummerable并每次提取一批1000个ID,以另一种方法执行一些操作。

    我如何从Ienumerable的开始一次提取1000个ID ...做一些其他事情然后获取下一批1000个

    可以使用linq morelinq库的 batch方法(可从NuGet获得):

    foreach(IEnumerable<User> batch in users.Batch(1000))
       // use batch
    

    如果简单使用库不是一种选择,则可以重新使用实现:

    public static IEnumerable<IEnumerable<T>> Batch<T>(
            this IEnumerable<T> source, int size)
    {
        T[] bucket = null;
        var count = 0;
    
        foreach (var item in source)
        {
           if (bucket == null)
               bucket = new T[size];
    
           bucket[count++] = item;
    
           if (count != size)                
              continue;
    
           yield return bucket.Select(x => x);
    
           bucket = null;
           count = 0;
        }
    
        // Return the last bucket with all remaining elements
        if (bucket != null && count > 0)            
            yield return bucket.Take(count);            
    }
    
    yield return bucket;
  • 相关阅读:
    ZD ZDC数据类型 sort
    常识
    面试
    无锡
    sqlldr return code
    025:为什么需要将Logger对象声明为private static final类型的
    中级职称
    《宪法》关于全国人民代表大会的规定
    python打包成exe
    请问.AE和PR有什么区别?
  • 原文地址:https://www.cnblogs.com/51net/p/13874750.html
Copyright © 2011-2022 走看看