一尘不染

在Linq中创建批次

c#

有人可以建议一种在linq中创建一定大小的批次的方法吗?

理想情况下,我希望能够以一定数量的可配置量执行操作。


阅读 259

收藏
2020-05-19

共1个答案

一尘不染

您无需编写任何代码。使用MoreLINQ
Batch方法,它将源序列分批处理成大小的存储桶(MoreLINQ可作为NuGet包提供,您可以安装):

int size = 10;
var batches = sequence.Batch(size);

实现为:

public static IEnumerable<IEnumerable<TSource>> Batch<TSource>(
                  this IEnumerable<TSource> source, int size)
{
    TSource[] bucket = null;
    var count = 0;

    foreach (var item in source)
    {
        if (bucket == null)
            bucket = new TSource[size];

        bucket[count++] = item;
        if (count != size)
            continue;

        yield return bucket;

        bucket = null;
        count = 0;
    }

    if (bucket != null && count > 0)
        yield return bucket.Take(count).ToArray();
}
2020-05-19