我想在LINQ声明中找到位置,并获取该项目和下一个(x)数量。示例代码:如何找到第一个具体项目,然后采取3以下?
List<int> numbers = new List<int>(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
numbers = numbers.Where(elt => elt == 6).Take(3).ToList();
我想找回过滤列表6,7,8。但是这不起作用。我接近这个错误吗?
在此先感谢!
我想在LINQ声明中找到位置,并获取该项目和下一个(x)数量。示例代码:如何找到第一个具体项目,然后采取3以下?
List<int> numbers = new List<int>(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
numbers = numbers.Where(elt => elt == 6).Take(3).ToList();
我想找回过滤列表6,7,8。但是这不起作用。我接近这个错误吗?
在此先感谢!
你几乎明白了。你只需要改变Where
到SkipWhile
:
numbers = numbers.SkipWhile(elt => elt != 6).Take(3).ToList();
你必须使用Where()
重载需要项目的索引以及再与indexOf()
使用:
List<int> numbers = new List<int>(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
var result = numbers.Where((x, i) => i >= numbers.IndexOf(6)).Take(3);
它会给出预期的结果。 –
与[Dennis方式](http://stackoverflow.com/a/33145213/284240)相比,这有点麻烦。它还会枚举列表中每个项目的列表。 –
更好的跳过(numbers.IndexOf(6))。拿(3)',但这两个将枚举列表两次。对于具体的收藏品来说,这不一定是可怕的,但对于枚举来说却是一个真正的禁忌。 – Corey
下面是其进入另一种方法当可能的数字不是唯一的时候播放,并且您希望包括下两个追随者在内的所有事件:
List<int> numbers = new List<int>(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 6, 7, 8, 9, 6 });
numbers = Enumerable.Range(0, numbers.Count)
.Where(index => numbers[index] == 6)
.SelectMany(index => numbers.Skip(index).Take(3))
.ToList(); // 6,7,8,6,7,8,6
感谢您的替代方法! – OtoNoOto
@AnikIslamAb嗨为什么会选择1 2 3? – Rawling
伟大的回答丹尼斯: - : – Sunny
工程完美和干净的代码。谢谢! – OtoNoOto