2011-03-14 135 views
14

爲什麼下面的代碼不會對我的列表進行排序?使用OrderBy對列表進行排序

List<string> lst = new List<string>() { "bac", "abc", "cab" }; 
lst.OrderBy(p => p.Substring(0)); 

回答

24

因爲排序依據返回IOrderedEnumerable你應該做的:

lst = lst.OrderBy(p => p.Substring(0)).ToList(); 

你也可以做到以下幾點:

lst.Sort(); 
+0

庫爾..simpleň完美 – 2011-03-14 07:49:16

+0

注意'名單 .Sort'是一種不穩定的排序,而排序依據是穩定的。當然,在這種情況下,排序僅爲*第一個字母,而使用不帶任何參數的「list.Sort」將按整個字符串進行排序。 – 2011-03-14 07:56:36

+0

Jon,'.Substring(0)'返回整個字符串,我相信...對於第一個字符,需要'.Substring(0,1)'或'[0]'... – 2011-03-14 08:09:39

13

你混淆了LINQ操作與改變的變量是一個方法應用於(即對象的實例方法)。

LINQ操作(即.OrderBy)返回查詢。它對您的對象執行操作(即lst)。

您需要在查詢的結果分配回你的變量:

在LINQ行話
lst = lst.OrderBy(p => p).ToList(); 

1
string[] words = { "bac", "abc", "cab" }; 

var sortedWords = from w in words 
        orderby w 
        select w; 

Console.WriteLine("The sorted list of words:"); 

foreach (var w in sortedWords) 
{ 
    Console.WriteLine(w); 
}