使用LINQ对数字进行分组

Chu*_*Tey 3 c# linq functional-programming

假如我有这样的数字列表,

   [3, 3, 1, 2, 3, 2]
Run Code Online (Sandbox Code Playgroud)

我想按顺序将它们组合在一起,使每组的总和小于或等于5,即正确的答案是:

  [3], [3, 1], [2,3], [2]
Run Code Online (Sandbox Code Playgroud)

有没有办法用Linq表达这个?

Eni*_*ity 9

简单.

var results = xs.Aggregate<int, List<List<int>>>(
    new List<List<int>> { new List<int>() },
    (a, n) =>
    {
        if (a.Last().Sum() + n > 5)
        {
            a.Add(new List<int> { n });
        }
        else
        {
            a.Last().Add(n);
        }
        return a;
    });
Run Code Online (Sandbox Code Playgroud)

所以,从这个:

var xs = new [] { 3, 3, 1, 2, 3, 2, };
Run Code Online (Sandbox Code Playgroud)

我明白了:

结果