2009-08-20 19 views
10

Duplicar posibles:
How to sort an array of object by a specific field in C#?¿Cómo ordenar una matriz que contiene objetos de clase por un valor de propiedad de una instancia de clase?

Dado el siguiente código:

MyClass myClass; 
MyClassArray[] myClassArray = new MyClassArray[10]; 

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

El resultado final podría, por ejemplo, el siguiente aspecto:

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

¿Cómo lo haría ordenar la [] array MyClassArray acuerdo con la propiedad myClass.Name orden alfabético para la matriz se verá así en el final:

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

* Editar: estoy usando VS 2005/.NET 2.0.

+4

Exact dup de http://stackoverflow.com/questions/1301822 –

+1

No es lo mismo en lo que a mí respecta. –

+0

** Bueno, * según todas las apariencias, * es lo mismo. ** Si vas a disputar una bandera duplicada, al menos prepárate para explicar por qué tu pregunta es diferente a la que se hizo previamente, y por qué las respuestas dadas porque ese no te ayudará en tu situación. De lo contrario, ¿cuál es el punto? – Shog9

Respuesta

18

Puede usar la sobrecarga Array.Sort que toma un parámetro Comparison<T>:

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

Perfecto, gracias Luke. –

+2

Necesitaba lo mismo, pero con orden descendente, negué el resultado de la devolución. funcionó bien :) – Umamaheswaran

9

Tienes MiClase implementar IComparable interfaz y luego usar Array.Sort

Algo como esto funcionará para CompareTo (suponiendo que la propiedad Name es de tipo cadena)

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

o simplemente utilizando LINQ

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