2010-02-16 83 views
0

我有一個對象列表,其中對象有2個屬性:idname。我必須按物品名稱排列清單訂購對象列表

我該怎麼做?

+2

一個比特的信息在對象上將是有益的。 – 2010-02-16 09:26:19

回答

1

當有內置的方法來做到這一點時,Linq是矯枉過正的。

如果你的意思是一個數組,只需使用Array.Sort

Array.Sort(items, (x, y) => x.Name.CompareTo(y.Name)); 

如果你說的是List<T>,使用Sort功能有:

items.Sort((x, y) => x.Name.CompareTo(y.Name)); 
+0

+1使用本地列表支持排序,而不是爆發到Linq(並不是Linq有任何問題,但在這種情況下,它是過度殺傷恕我直言,也沒有給予任何更明確的目的) – 2010-02-16 09:38:15

+1

對於使用內置的支持是正確的,但正如其他人所說,它沒有處理空的情況下......現在你可以改變上述來處理這些情況,但是代碼不再那麼幹淨。那麼它是一個簡單的orderby和上面的空選擇之間的選擇......我在這種情況下哪個更好...... – anthonyv 2010-02-16 09:44:31

+0

@anthonyv - 所有的公平點。是的 - 一旦您將空檢查放入,它確實會失去一些簡潔性。仍然 - 很高興看到人們在桌子上放置了幾種不同的解決方案。 – 2010-02-16 10:12:31

4

您是否嘗試過使用linq?

using System.Collections.Generic; 
using System.Linq; 

namespace Demo 
{ 
    public class Test 
    { 
     public void SortTest() 
     { 
      var myList = new List<Item> { new Item { Name = "Test", Id = 1 }, new Item { Name = "Other", Id = 1 } }; 
      var result = myList.OrderBy(x => x.Name); 
     } 
    } 

    public class Item 
    { 
     public string Name { get; set; } 
     public int Id { get; set; } 
    } 
} 
1

如果你正在處理這些對象的列表,最簡單的方法是向排序方法提供比較:

var list = new List<MyObject>(); 
... 
list.Sort((item1, item2) => item1.Name.CompareTo(item2.Name)); 

這是很好,很簡單,因爲字符串執行IComparable<string>。另一種方法是讓你在你的類實現IComparable<MyObject>,然後你可以只調用list.Sort()

0

List<T>類的Sort方法有一個重載接受一個自定義比較:

list.Sort((x,y) => x.Name.CompareTo(y.Name));