首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据对象属性之一排序对象的ArrayList?

如何根据对象属性之一排序对象的ArrayList?
EN

Stack Overflow用户
提问于 2014-11-20 15:17:28
回答 3查看 4.4K关注 0票数 0

如何根据对象属性之一排序对象的ArrayList?

请不要建议任何与List<T>有关的技术。对于我目前的软件,使用List<T>是不可能的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-20 15:26:59

您需要为您的实体实现IComparer,例如:

代码语言:javascript
复制
public class MyClassComparer : IComparer<MyClass>
{
    public int Compare(MyClass _x, MyClass _y)
    {
        return _x.MyProp.CompareTo(_y.MyProp);
    }
}

并将其传递给ArrayList.Sort,如:

代码语言:javascript
复制
myArrayList.Sort(new MyClassComparer());
票数 1
EN

Stack Overflow用户

发布于 2014-11-20 15:28:48

你必须实现你自己的比较器,MSDN链路

票数 0
EN

Stack Overflow用户

发布于 2014-11-20 15:31:11

这是一个使用LinqPad编写的示例,可以帮助您。松散地基于MSDN示例。

您只需要使用自己的类,而不是这里使用的示例。

代码语言:javascript
复制
void Main()
{
    ArrayList al = new ArrayList();
    al.Add(new Person() {Name="Steve", Age=53});
    al.Add(new Person() {Name="Thomas", Age=30});

    al.Sort(new PersonComparer());

    foreach(Person p in al)
        Console.WriteLine(p.Name + " " + p.Age);

}

class Person
{
    public string Name;
    public int Age;
}
class PersonComparer : IComparer
{

    int IComparer.Compare( Object x, Object y )  
    {
        if (x == null)
            return (y == null) ? 0 : 1;

        if (y == null)
            return -1;

        Person p1 = x as Person;
        Person p2 = y as Person;

        // Uncomment this to sort by Name 
        // return( (new CaseInsensitiveComparer()).Compare( p1.Name, p2.Name) );

        return( p1.Age - p2.Age );
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27043055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档