2015-10-15 50 views
0

我想在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。但是这不起作用。我接近这个错误吗?

在此先感谢!

回答

6

你几乎明白了。你只需要改变WhereSkipWhile

numbers = numbers.SkipWhile(elt => elt != 6).Take(3).ToList(); 
+0

@AnikIslamAb嗨为什么会选择1 2 3? – Rawling

+0

伟大的回答丹尼斯: - : – Sunny

+0

工程完美和干净的代码。谢谢! – OtoNoOto

1

你必须使用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); 
+0

它会给出预期的结果。 –

+0

与[Dennis方式](http://stackoverflow.com/a/33145213/284240)相比,这有点麻烦。它还会枚举列表中每个项目的列表。 –

+1

更好的跳过(numbers.IndexOf(6))。拿(3)',但这两个将枚举列表两次。对于具体的收藏品来说,这不一定是可怕的,但对于枚举来说却是一个真正的禁忌。 – Corey

0

下面是其进入另一种方法当可能的数字不是唯一的时候播放,并且您希望包括下两个追随者在内的所有事件:

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 
+0

感谢您的替代方法! – OtoNoOto

相关问题