使用LINQ获取最后x个连续项目

4th*_*ace 1 .net c# linq

我的问题与此类似:使用Linq查找列表中的连续项.除此之外,我想得到最后一个没有间隙的项目.例如:

2, 4, 7, 8
Run Code Online (Sandbox Code Playgroud)

产量

7,8
Run Code Online (Sandbox Code Playgroud)

另一个例子:

4,5,8,10,11,12
Run Code Online (Sandbox Code Playgroud)

产量

10,11,12
Run Code Online (Sandbox Code Playgroud)

怎么办?

spe*_*der 10

我假设你想要最后一个连续序列有多个成员......所以从序列开始

{4, 5, 8, 10, 11, 12, 15} 
Run Code Online (Sandbox Code Playgroud)

你期待着这个序列:

{10, 11, 12}
Run Code Online (Sandbox Code Playgroud)

如果允许最后一个序列只有一个成员,则表示要删除的行,给出一个序列

{15}
Run Code Online (Sandbox Code Playgroud)

这是linq:

new[] {4, 5, 8, 10, 11, 12, 15}
    .Select((n,i) => new {n, i})
    .GroupBy(x => x.n - x.i) //this line will group consecutive nums in the seq
    .Where(g => g.Count() > 1) //remove this line if the seq {15} is expected
    .Select(x => x.Select(xx => xx.n))
    .LastOrDefault()
Run Code Online (Sandbox Code Playgroud)

这里有一个隐藏的假设,即序列的数字是按升序排列的.如果不是这种情况,则需要注册microsoft扩展方法的功能,以便在序列中查找连续项.如果是这种情况,请告诉我.