我正在開發具有“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;