我想在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