2010-03-11 46 views
9

如何在第一次使用linq後不從"-"開始檢索所有元素?嘗試使用linq在第一次匹配後獲取所有元素

var arr = new[] {"-s1", "-s2", "va", "-s3", "va2", "va3"}; 
var allElementsAfterVA = from a in arr where ???? select a; 

我想allElementsAfterVA"-s3", "va2", "va3"

+0

你爲什麼想在這裏使用linq?如果它是一個簡單的字符串數組,它不知道或關心你的項目的順序 – 2010-03-11 20:53:22

+0

你的意思是第一個不以「 - 」開始? – 2010-03-11 20:59:18

+0

@MatteS:好的 - 現在你的問題更有意義:) – 2010-03-11 21:01:27

回答

16

爲第一不以啓動後,發現所有的參數 「 - 」,你可以這樣做:

var elementsAfterFirstNonDash = arr.SkipWhile(i => i[0] != '-').Skip(1); 

這個發現「VA 「,然後通過跳過(1)跳過它。其餘的參數將被返回。

+1

這似乎是一個解決方案只爲這個測試案例。似乎你可以在任何數據集上使用它... – 2010-03-11 20:57:59

+0

它似乎仍然是一個測試數據特定的解決方案。也許更通用一些。或者需要模糊地創建一個通用的解決方案? – 2010-03-11 21:00:00

+0

是的,解決方案似乎只適用於這個測試案例。作爲一個例子,我想在第一個*之後得到所有的元素,而不是以「 - 」開始...... – MatteS 2010-03-11 21:01:05

0

您能否更清楚一點? 如果我理解正確,以「 - 」開頭的第一個是「-s1」,所以之後的元素將是「-s2」,「va」,「-s3」,「va2」,「va3」和不是「-s3」,「va2」,「va3」

+0

對不起,我錯過了一個*不*那裏......我的意思是說「在第一個沒有以」 - 「開頭之後..」 – MatteS 2010-03-11 21:02:05

0

我不完全從你的文本中得到問題,但看着這個例子:你看過SkipWhile()嗎?似乎是相關/有用的?

0
arr.Where((n, i) => i > 0 && n.StartsWith("-")) 

產生

-s2 -s3 

這是你的意思?

相關問題