如何从序列中间剪切一些元素?

时间:2015-03-24 10:49:36

标签: c# .net linq

是否可以使用LINQ表达式跳过序列中间的某些元素?我想要N个元素,然后跳过M个元素,然后取其余的序列。我知道我可以为此编写自己的函数,但我想知道是否可以仅使用内置函数来完成它?

4 个答案:

答案 0 :(得分:3)

一种方法是使用索引:

sequence.Select((value, index) => new {value, index})
.Where(x => x.index < startOfRange || x.index > endOfRange)
.Select(x.value);

或者,甚至更简单:(不能相信我第一次没有想到这一点)

sequence.Where((value, index) => index < startOfRange || index > endOfRange)

答案 1 :(得分:2)

int n = 5;
int m = 10;
int k = n+m;
var seq = Enumerable.Range(100, 20).Where((p,i) => i<=n || i>= k)));

// the output is 100,101,102,103,104,105,115,116,117,118,119

答案 2 :(得分:0)

这可以通过Skip()Take()来完成,您也只需使用Concat()

sequence.Take(N).Concat(sequence.Skip(N + M));

答案 3 :(得分:-1)

myList.Where((o, i) => i <= startSkip || i >= endSkip);