2009-08-20 8 views
10

Powiel możliwe:
How to sort an array of object by a specific field in C#?Jak posortować tablicę zawierającą obiekty klas według wartości właściwości instancji klasy?

Biorąc pod uwagę następujący kod:

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

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

Efekt końcowy może na przykład wyglądać tak:

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

Jak byś sortować MyClassArray [] tablica zgodnie z właściwością myClass.Name alfabetycznie więc tablica będzie wyglądać tak w końcu:

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

* Edycja: Używam VS 2005/.NET 2.0.

+4

Dokładny dup z http://stackoverflow.com/questions/1301822 –

+1

To nie to samo, o ile mi chodzi. –

+0

** Cóż, * pod każdym pozorem, * to jest to samo. ** Jeśli chcesz zakwestionować duplikat flagi, to przynajmniej przygotuj się na wyjaśnienie, dlaczego twoje pytanie różni się od wcześniej zadawanego pytania i dlaczego podane odpowiedzi bo to nie pomoże ci w twojej sytuacji. W przeciwnym razie, o co chodzi? – Shog9

Odpowiedz

18

Można użyć przeciążenia Array.Sort, które pobiera parametr Comparison<T>:

+0

Doskonale, dzięki Luke. –

+2

Potrzebowałem tego samego, ale z malejącą kolejnością, po prostu zanegowałem wynik zwrotu. to działało dobrze :) – Umamaheswaran

9

Have MojaKlasa wdrażania IComparable interfejs, a następnie użyć Array.Sort

Coś jak to będzie pracować dla CompareTo (zakładając, że właściwość Name ma typ string)

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

Albo po prostu przy użyciu LINQ

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