2010-09-13 46 views
29

選擇第二項我有LINQ - 在IEnumerable的

string[] pkgratio= "1:2:6".Split(':');

var items = pkgratio.OrderByDescending(x => x); 

我想選擇的中間值都拿出了這一點。這是在IEnumberable中選擇第二個值的正確方法嗎?

pkgratio.Skip(1).Take(1).First(); 
+0

與我的第一個問題有關:http://stackoverflow.com/questions/1735146/ways-to-get-the-middle-of-a-list-in-haskell – 2010-09-13 14:03:55

+0

使用'First()'暗示你有信心,一個項目將實際上在你試圖訪問的位置。如果有任何疑問,你可能希望使用'FirstOrDefault()'。 – 2010-09-13 14:06:01

+3

你不需要拿(1) – 2010-09-13 14:25:14

回答

61

雖然你有什麼工作,最簡單的方法是使用數組的索引和引用的第二個項目(索引1處以來,該指數在零開始的第一個元素):pkgratio[1]

Console.WriteLine(pkgratio[1]); 

一個更完整的例子:

string[] pkgratio = "1:2:6".Split(':'); 

for (int i = 0; i < pkgratio.Length; i++) 
    Console.WriteLine(pkgratio[i]); 

隨着IEnumerable<T>你有什麼工作,或者你可以直接使用獲得的元素在ElementAt method

// same idea, zero index applies here too 
var elem = result.ElementAt(1); 

這裏是爲您的IEnumerable<string>樣品。請注意,AsEnumerable()呼籲是要強調針對IEnumerable<string>的樣本作品。您實際上可以使用ElementAt對來自Splitstring[]陣列結果,但使用前面顯示的索引器會更有效。

var pkgratio = "1:2:6".Split(':').AsEnumerable(); 
Console.WriteLine(pkgratio.ElementAt(1)); 
+0

現在使用Linq多年了,從未使用過ElementAt()。忙於寫一些測試,需要它。很簡單的回答 – 2013-07-09 09:04:14

+2

這裏同樣用ElementAt +1,現在也用ElementAtOrDefault – jolySoft 2015-06-15 15:04:05

15

pkgratio.ElementAt(1);您的方案。

pkgratio.Skip(5).Take(10);

21

我不認爲:

但是,如果你使用一些數據,實現IQueryable或者你需要開始採取在特定的指數如各類物品的方法只適用你需要.Take(1)

pkgratio.Skip(1).First() 
5

但在這種情況下,你有一個數組,這樣你就可以很愉快地使用獲得的第二項:

pkgratio[1] 
9

嘛,Take(1)不是絕對必要的,如果你打算只First(),所以我可能會

pkgratio.Skip(1).First(); 

然而去,First()將拋出一個異常,如果有沒有價值,所以你可能會想嘗試FirstOrDefault()然後檢查爲空。