c# - 使用 LINQ 对数字进行分组

标签 c# linq functional-programming

假设如果我有这样一个数字列表,

   [3, 3, 1, 2, 3, 2]

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

  [3], [3, 1], [2,3], [2]

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

最佳答案

简单。

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;
    });

因此,从这里:

var xs = new [] { 3, 3, 1, 2, 3, 2, };

我明白了:

result

关于c# - 使用 LINQ 对数字进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20649954/

相关文章:

c# - 行为类似于 Active Directory 中的“多对象选择”对话框的文本框

C# Linq to XML 获取名称值包含特定字符串的元素

functional-programming - 对 Substitution/`ap` 类型签名和不同实现的理解困惑(函数式编程)

scala - 无法使用 andThen 内联部分应用的函数

c# - 如何获得符合条件的通用列表元素的平均值?

haskell - 过滤器 vs takeWhile : difference and runtime

javascript - 将 Razor 字符串变量转换为 MVC 中的 Javascript 字符串变量

c# - 如何在发生异常时跟踪所有局部变量

c# - 如何将 View 内的命令绑定(bind)到 MvvmCross 中的 ViewModel

c# - 如何使用 LINQ 从列表中获取索引