如何通过其中一个对象属性订购对象的ArrayList?
答案 0 :(得分:3)
ArrayList有点弃用。我们现在使用通用的List<T>类。*
您可以对列表&lt; T&gt;进行排序就地使用List<T>.Sort:
List<Person> persons = // ...
persons.Sort((a, b) => string.Compare(a.Name, b.Name));
或创建新的列表&lt; T&gt;使用LINQ的Enumerable.OrderBy:
List<Person> persons = // ...
List<Person> sortedPersons = persons.OrderBy(p => p.Name).ToList();
(*除非您坚持使用.NET Framework 1.1)
答案 1 :(得分:2)
正如dtb解释的那样,你应该使用通用List<T>
而不是无类型ArrayList
,除非你使用的是pre 2.0版本的.NET。
如果你真的想用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());
答案 2 :(得分:0)
每当您想要对数组进行排序时,您需要将其与特定元素进行比较。 假设您有一个名为Client的数组List,Client有clientID 现在你要对它进行排序。你的代码应该是
Client.Sort(a, b) => string.Compare(a.clientID.ToString(), b.clientID.ToString()));