2009-08-20 53 views
10

可能重复:
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。

+4

确切的重复http://stackoverflow.com/questions/1301822 – 2009-08-20 06:26:39

+1

这是不一样的事情,就我而言。 – 2009-08-20 06:30:54

+0

**好的,*所有的外观,*都是一样的。**如果你要争取一个重复的标志,那么至少要准备好解释为什么你的问题与先前提出的不同,以及为什么给出的答案因为那个在你的情况下不会帮助你。否则,有什么意义? – Shog9 2009-08-21 18:26:20

回答

18

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

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

完美,谢谢卢克。 – 2009-08-20 19:01:49

+2

我需要相同的但降序,只是否定返回结果。它工作得很好:) – Umamaheswaran 2013-04-01 11:25:03

9

有无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(); 
相关问题