如何批量遍历IEnumerable

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

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

这可能吗?


一只萌萌小番薯
浏览 1108回答 3
3回答

天涯尽头无女友

听起来您需要使用对象的“跳过”和“获取”方法。例:users.Skip(1000).Take(1000)这将跳过前1000个,并采用下一个1000。您只需要增加每次通话跳过的数量您可以将整数变量与“跳过”参数一起使用,并且可以调整要跳过的量。然后可以在方法中调用它。public IEnumerable<user> GetBatch(int pageNumber){&nbsp; &nbsp; return users.Skip(pageNumber * 1000).Take(1000);}

当年话下

最简单的方法可能就是使用GroupByLINQ中的方法:var batches = myEnumerable&nbsp; &nbsp; .Select((x, i) => new { x, i })&nbsp; &nbsp; .GroupBy(p => (p.i / 1000), (p, i) => p.x);但是,对于更复杂的解决方案,请参阅此博客文章,以了解如何创建自己的扩展方法来执行此操作。为后代在此复制:public static IEnumerable<IEnumerable<T>> Batch<T>(this IEnumerable<T> collection, int batchSize){&nbsp; &nbsp; List<T> nextbatch = new List<T>(batchSize);&nbsp; &nbsp; foreach (T item in collection)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; nextbatch.Add(item);&nbsp; &nbsp; &nbsp; &nbsp; if (nextbatch.Count == batchSize)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; yield return nextbatch;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nextbatch = new List<T>();&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // or nextbatch.Clear(); but see Servy's comment below&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; if (nextbatch.Count > 0)&nbsp; &nbsp; &nbsp; &nbsp; yield return nextbatch;}
打开App,查看更多内容
随时随地看视频慕课网APP