使用linq对相邻值进行分组

Ale*_*kha 5 .net linq group-by aggregate

我有一个int值的排序列表,我想组相邻的值.下一个值为nextvalue> = prevValue + 1的值是邻居.

例如:列表:

{1,2,3,5,6,8,9,10}
Run Code Online (Sandbox Code Playgroud)

团体将是:

{1,2,3}
{5,6}
{8,9,10}
Run Code Online (Sandbox Code Playgroud)

这可以用linq完成吗?

这可以很容易地在没有linq的情况下完成 - 通过迭代列表,但我想知道linq是否有解决方案.

Pio*_*ski 1

这对我有用:

private static void GroupToNeighboursTest()
{
    var numbers = new List<int> { 1, 2, 3, 5, 6, 8, 9, 10 };
    var neighbours = numbers
        .Zip(numbers.Skip(1), Tuple.Create)
        .Aggregate(new List<List<int>> { new List<int> { numbers.First() } }, (result, i) =>
        {
            if (i.Item1 == i.Item2 - 1)
            {
                result.Last().Add(i.Item2);
            }
            else
            {
                result.Add(new List<int> { });
                result.Last().Add(i.Item2);
            }

            return result;
        });
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述