我有点惊讶地发现以下代码的结果,我只是想从一个int序列中删除所有3:
var sequence = new [] { 1, 1, 2, 3 };
var result = sequence.SkipWhile(i => i == 3); // Oh noes! Returns { 1, 1, 2, 3 }
为什么3没有被跳过?
我的下一个想法是,好吧,Except运算符可以完成这个任务:
var sequence = new [] { 1, 1, 2, 3 };
var result = sequence.Except(i => i == 3); // Oh noes! Returns { 1, 2 }
总的来说,
- 除了删除3之外,还删除非独特的元素。呃
- SkipWhile不会跳过最后一个元素,即使它与条件匹配。呃
有人能解释一下为什么SkipWhile不跳过最后一个元素吗?谁能建议我用什么LINQ操作符从上面的序列中删除'3'?
6条答案
按热度按时间ufj5ltwl1#
它没坏。
SkipWhile
只会跳过IEnumerable<T>
开头的项目。一旦这个条件不满足,它将很高兴地采取其余的元素。以后与之匹配的其他元素将不会被跳过。ujv3wf0j2#
vmdwslir3#
SkipWhile和TakeWhile操作符在 predicate 函数通过时跳过或返回序列中的元素(返回True)。第一个没有通过 predicate 函数的元素结束求值过程。
//只要指定的条件为真,就跳过序列中的元素,并返回剩余的元素。
pexxcrt24#
您可能会发现有用的一个解决方案是使用List“FindAll”函数。
eyh26e7m5#
艾哈迈德已经回答了你的问题,但这里有另一个选择:
ax6ht2ek6#
只要指定的条件为真,就跳过序列中的元素,然后返回剩余的元素。
你仍然想使用skipwhile然后做orderby然后应用skipwhile