C# 按ArrayList包含的属性对象排序ArrayList?
如何按对象属性之一对对象的ArrayList进行排序?ArrayList有点不受欢迎。我们现在使用泛型类* 您可以使用以下方法对列表进行就地排序:C# 按ArrayList包含的属性对象排序ArrayList?,c#,C#,如何按对象属性之一对对象的ArrayList进行排序?ArrayList有点不受欢迎。我们现在使用泛型类* 您可以使用以下方法对列表进行就地排序: 列出人员=/。。。 persons.Sort((a,b)=>string.Compare(a.Name,b.Name)); 或者使用LINQ创建一个新列表: 列出人员=/。。。 List sortedPersons=persons.OrderBy(p=>p.Name.ToList(); (*除非您坚持使用.NET Framework 1.1)Ar
列出人员=/。。。
persons.Sort((a,b)=>string.Compare(a.Name,b.Name));
或者使用LINQ创建一个新列表:
列出人员=/。。。
List sortedPersons=persons.OrderBy(p=>p.Name.ToList();
(*除非您坚持使用.NET Framework 1.1)ArrayList有些不推荐使用。我们现在使用泛型类* 您可以使用以下方法对列表进行就地排序:
列出人员=/。。。
persons.Sort((a,b)=>string.Compare(a.Name,b.Name));
或者使用LINQ创建一个新列表:
列出人员=/。。。
List sortedPersons=persons.OrderBy(p=>p.Name.ToList();
(*除非您坚持使用.NET Framework 1.1)正如dtb所解释的那样,除非您使用的是.NET的2.0以前版本,否则您可能应该使用通用
列表而不是非类型数组列表
如果您确实想使用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());
正如dtb所解释的,除非您使用的是.NET的2.0之前版本,否则您可能应该使用通用的列表,而不是非类型的数组列表
如果您确实想使用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());
每当您要对数组进行排序时,都需要将其与数组中的特定元素进行比较。
假设您有一个名为Client的数组列表,并且Client有clientID
现在您要对其进行排序。你的代码应该是
Client.Sort(a, b) => string.Compare(a.clientID.ToString(), b.clientID.ToString()));
每当您要对数组进行排序时,都需要将其与数组中的特定元素进行比较。
假设您有一个名为Client的数组列表,并且Client有clientID
现在您要对其进行排序。你的代码应该是
Client.Sort(a, b) => string.Compare(a.clientID.ToString(), b.clientID.ToString()));
嘿,我试过你的第一个建议,它告诉我需要使用委托类型我已经仔细检查过了,它在这里工作。您使用的框架版本是什么?你能发布你的代码吗?你得到的确切错误信息是什么?他说的是ArrayList。兰博达斯要求他跟上3次更新和一大堆阅读。失败的原因,真的。@Tom:确保您使用的是Visual Studio 2008或2010。这在2005年是行不通的@汉斯:他很可能来自爪哇..嘿,我试过你的第一个建议,它告诉我需要使用委托类型?:我已经仔细检查过了,它在这里工作。您使用的框架版本是什么?你能发布你的代码吗?你得到的确切错误信息是什么?他说的是ArrayList。兰博达斯要求他跟上3次更新和一大堆阅读。失败的原因,真的。@Tom:确保您使用的是Visual Studio 2008或2010。这在2005年是行不通的@汉斯:他很可能来自爪哇。。