2011-01-26 25 views

回答

3

史蒂芬的答案是好的,但如果你使用.NET 3.5或更高的版本還應該考慮使用LINQ。整個代碼可以寫爲:

var myList = (from obj in someObjects 
       orderby obj.OriginalInteger 
       select new MyObject { SomeInteger = obj.OriginalInteger, 
            OtherRandomData = obj.OtherRandom Data }) 
      .ToList(); 

注意,這是由原始數據排序,而不是先建設MyObject值和然後排序。你也可以寫爲:

var myList = someObjects.OrderBy(obj => obj.OriginalInteger) 
         .Select(obj => new MyObject { 
            SomeInteger = obj.OriginalInteger, 
            OtherRandomData = obj.OtherRandom Data }) 
         .ToList(); 

需要注意的是,如果你想通過多個屬性進行排序,這與LINQ真的很容易,但可以是一個有點麻煩與List<T>.Sort

+0

好嗎?我認爲這是相當不錯的;-) – Steven 2011-01-26 20:31:24

5

你可以採取Sort過載,需要一個Comparison<T>委託:

myList.Sort((x, y) => x.SomeInteger.CompareTo(y.SomeInteger)); 
0

還可以使用的OrderBy(),它避免了必須指定完整比較邏輯:

myList = myList.OrderBy(x=>x.SomeInteger).ToList(); 

這將比List.Sort()慢,並且SomeInteger必須是IComparable(所有ValueType都是),但排序將是穩定的(對於「關係」,項目保留它們與未排序列表的相對順序)。

0
myList.Sort(); 
myList.Reverse(); 

這個簡單的代碼應該從最小到最大的順序。但是由於最大到最小隻是最小到最大的倒數,所以我使用了Reverse函數。