如何通过类实例的属性值对包含类对象的数组进行排序?

时间:2009-08-20 06:23:13

标签: c# arrays .net-2.0 performance

  

可能重复:
  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 个答案:

答案 0 :(得分:24)

您可以使用带有Array.Sort参数的Comparison<T>重载:

Array.Sort(myClassArray,
    delegate(MyClass x, MyClass y) { return x.Name.CompareTo(y.Name); });

答案 1 :(得分:11)

让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();