我的问题与此类似:使用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扩展方法的功能,以便在序列中查找连续项.如果是这种情况,请告诉我.