我需要循环遍历整个用户列表,但需要一次抓取20个.
foreach (var student in Class.Students.Take(20))
{
Console.WriteLine("You belong to Group " + groupNumber);
groupNumber++;
}
Run Code Online (Sandbox Code Playgroud)
这样,前20个将属于组1,第二个20属于组2,依此类推.
采取正确的语法吗?我相信Take将花费20来完成.谢谢!
Mik*_*keP 15
你可以这样做:
int i = 0;
foreach (var grouping in Class.Students.GroupBy(s => ++i / 20))
Console.WriteLine("You belong to Group " + grouping.Key.ToString());
Run Code Online (Sandbox Code Playgroud)
对于类似的问题,我曾经做过一个扩展方法:
public static IEnumerable<IEnumerable<T>> ToChunks<T>(this IEnumerable<T> enumerable, int chunkSize)
{
int itemsReturned = 0;
var list = enumerable.ToList(); // Prevent multiple execution of IEnumerable.
int count = list.Count;
while (itemsReturned < count)
{
int currentChunkSize = Math.Min(chunkSize, count - itemsReturned);
yield return list.GetRange(itemsReturned, currentChunkSize);
itemsReturned += currentChunkSize;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,最后一个块可能小于指定的块大小.
编辑
使用的第一个版本Skip()/Take(),但克里斯指出,GetRange速度要快得多.