代码之家  ›  专栏  ›  技术社区  ›  Mr. Smith

如何按类实例的属性值对包含类对象的数组进行排序?[复制品]

  •  14
  • Mr. Smith  · 技术社区  · 15 年前

    可能重复:
    How to sort an array of object by a specific field in C#?

    给出以下代码:

    MyClass myClass;
    MyClassArray[] myClassArray = new MyClassArray[10];
    
    for(int i; i < 10; i++;)
    {
        myClassArray[i] = new myClass();
        myClassArray[i].Name = GenerateRandomName();
    }
    

    例如,最终结果如下:

    myClassArray[0].Name //'John';
    myClassArray[1].Name //'Jess';
    myClassArray[2].Name //'James';
    

    如何根据MyClass.Name属性按字母顺序对MyClassArray[]数组进行排序,使数组在结尾处看起来像这样:

    myClassArray[0].Name //'James';
    myClassArray[1].Name //'Jess';
    myClassArray[2].Name //'John';
    

    *编辑 :我使用的是vs 2005/.net 2.0。

    2 回复  |  直到 15 年前
        1
  •  23
  •   LukeH    15 年前

    你可以使用 Array.Sort 过载需要 Comparison<T> 参数:

    Array.Sort(myClassArray,
        delegate(MyClass x, MyClass y) { return x.Name.CompareTo(y.Name); });
    
        2
  •  11
  •   Simon Fox    15 年前

    让MyClass实现 IComparable 接口,然后使用 Array.Sort

    类似这样的内容适用于CompareTo(假定name属性具有类型字符串)

    public int CompareTo(MyClass other)
    {
        return this.Name.CompareTo(other.Name);
    }
    

    或者简单地使用LINQ

    MyClass[] sorted = myClassArray.OrderBy(c => c.Name).ToArray();