2015-10-15 24 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

相關問題