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是否有解决方案.
这对我有用:
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)