2009-08-20 35 views
10

thể trùng lặp:
How to sort an array of object by a specific field in C#?Làm thế nào để sắp xếp một mảng chứa các đối tượng lớp bằng một giá trị thuộc tính của một cá thể lớp?

Với đoạn mã sau:

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

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

Kết quả cuối cùng có thể ví dụ như thế này:

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

Làm thế nào bạn sắp xếp các MyClassArray [] array theo tài sản myClass.Name theo thứ tự abc nên mảng sẽ trông như thế này cuối cùng:

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

* Sửa: Tôi đang sử dụng VS 2005/NET 2.0.

+4

Ngõ chính xác của http://stackoverflow.com/questions/1301822 –

+1

Không giống như tôi quan tâm. –

+0

** Vâng, * bởi tất cả các lần xuất hiện, * nó giống nhau. ** Nếu bạn dự thi một lá cờ trùng lặp, ít nhất hãy sẵn sàng giải thích tại sao câu hỏi của bạn khác với câu hỏi trước đó và tại sao câu trả lời được đưa ra vì điều đó sẽ không giúp bạn trong tình huống của bạn. Nếu không, điểm là gì? – Shog9

Trả lời

18

Bạn có thể sử dụng quá tải Array.Sort mất tham số Comparison<T>:

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

Tuyệt vời, cảm ơn Luke. –

+2

Tôi cần thiết nhưng với thứ tự giảm dần, chỉ cần phủ nhận kết quả trả về. nó hoạt động tốt :) – Umamaheswaran

9

Có MyClass thực hiện giao diện IComparable và sau đó sử dụng Array.Sort

Something như thế này sẽ làm việc cho CompareTo (giả sử các tài sản tên có kiểu chuỗi)

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

Hoặc đơn giản là sử dụng LINQ

MyClass[] sorted = myClassArray.OrderBy(c => c.Name).ToArray(); 
Các vấn đề liên quan