2010-05-24 82 views

回答

3

ArrayList有點不贊成。我們現在使用的通用List<T>類*

您可以按就地使用List<T>.Sort列表<牛逼>:

List<Person> persons = // ... 

persons.Sort((a, b) => string.Compare(a.Name, b.Name)); 

或使用創建一個新的列表<牛逼> LINQ的Enumerable.OrderBy

List<Person> persons = // ... 

List<Person> sortedPersons = persons.OrderBy(p => p.Name).ToList(); 

(*除非您被.NET Framework 1.1困住)

+0

嗨ive試過你的第一個建議,它告訴我我需要使用委託類型? :s – Tom 2010-05-24 21:29:08

+0

我已經重新檢查它,它在這裏工作。你使用什麼框架版本?你能發佈你的代碼嗎?你得到了什麼確切的錯誤信息? – dtb 2010-05-24 21:36:52

+0

他在談論ArrayList。 Lambdas要求他趕上3次更新和一大堆閱讀。失去的原因,真的。 – 2010-05-24 21:57:55

2

正如dtb所解釋的那樣,除非您使用的是.NET 2.0的pre 2.0版本,否則您應該使用通用的List<T>而非無類型的ArrayList

如果你真的想與ArrayList做,有做兩種方式:

  • ,如果集合的元素實現IComparable,只需使用Sort方法不帶參數:

    arrayList.Sort(); 
    
  • 否則,您必須通過實現IComparer接口來創建自定義比較:

    public class PersonComparer : IComparer 
    { 
        public int Compare(object a, object b) 
        { 
         Person pa = a as Person; 
         Person pb = b as Person; 
         if (pa == pb) return 0; 
         if (pa == null) return -1; 
         if (pb == null) return 1; 
         return string.Compare(pa.Name, pb.Name); 
        } 
    } 
    
    ... 
    
    arrayList.Sort(new PersonComparer()); 
    
0

每當你要排序,你需要將它與它的特定元素比較的數組。 假設你有一個名爲客戶端和客戶端的數組列表,現在你想對它進行排序。你的代碼應該是

Client.Sort(a, b) => string.Compare(a.clientID.ToString(), b.clientID.ToString()));