使用Linq按索引求和

Tar*_*ora 5 .net c# linq

我有一个有96个值的集合.我想总结4个连续索引的值.我怎么能用Linq做到这一点?

collection = {100, 101, 200, 150, 103, 105, 100, 104,  .........., 20, 40, 60, 80};
Run Code Online (Sandbox Code Playgroud)

总和(100, 101, 200, 150;)则总和(103, 105, 100, 104;)......然后和(20, 40, 60, 80;)这意味着现在我的新系列将有24个值.

我怎么能用Linq做到这一点?

Ser*_*rvy 11

我们可以从这个实用程序函数开始,Batch根据给定的批量大小来设置项目:

public static IEnumerable<IEnumerable<T>> Batch<T>(this IEnumerable<T> source, int batchSize)
{
    List<T> buffer = new List<T>(batchSize);

    foreach (T item in source)
    {
        buffer.Add(item);

        if (buffer.Count >= batchSize)
        {
            yield return buffer;
            buffer = new List<T>(batchSize);
        }
    }
    if (buffer.Count > 0)
    {
        yield return buffer;
    }
}
Run Code Online (Sandbox Code Playgroud)

之后它就像下面这样简单:

var query = data.Batch(4)
    .Select(batch => batch.Sum());
Run Code Online (Sandbox Code Playgroud)