2010-05-24 131 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()));