2011-07-22 29 views
9

Bản sao có thể xảy ra:
Sorting a list using Lambda/Linq to objects
C# List<> OrderBy Alphabetical OrderPhân loại danh sách đối tượng bằng cách sở hữu chuỗi C#

Làm thế nào để tôi đi về sắp xếp một danh sách các đối tượng trong thứ tự chữ cái của một tài sản chuỗi.

Tôi đã thử triển khai IComparable trên thuộc tính nhưng tôi chỉ tìm ra cách sắp xếp theo ký tự đầu tiên (sử dụng char).

EDIT: Đây là một số mã mẫu.

class MyObject { 
    public string MyProperty {get;set;} 
} 

List<MyObject> sampleList = new List<MyObject>();  

MyObject sample = new MyObject(); 
sample.MyProperty = "Aardvark"; 

MyObject sample2 = new MyObject(); 
sample2.MyProperty = "Zebra"; 

sampleList.Add(sample); 
sampleList.Add(sample2); 

sampleList.Sort(); // or something similar 

foreach (var item in sampleList) { 
    Console.WriteLine(item.MyProperty); 
} 

Nên xuất Aardvark và Zebra (theo thứ tự bảng chữ cái).

Cảm ơn!

+0

LINQ to Objects – N0Alias

+0

Có thể điều này sẽ giúp http://stackoverflow.com/questions/722868/sorting-a-list-using-lambda-linq-to-objects – evilone

Trả lời

8

Bạn có thể nhận được một sắp xếp IEnumerable<MyObject> như vậy:

var sortedQuery = sampleList.OrderBy(x => x.MyProperty); 

Sau đó, bạn có thể chuyển đổi các truy vấn đến một danh sách như vậy:

var sortedList = sortedQuery.ToList(); 

Hoặc, bạn chỉ có thể lặp qua các mục:

foreach (var obj in sortedQuery) 
    Console.WriteLine(obj.MyProperty); 
3

Giả sử bộ sưu tập của bạn triển khai giao diện IEnumerable, bạn có thể chỉ đơn giản là gọi phương thức OrderBy vào bộ sưu tập của bạn:

myCollection.OrderBy(c => c.Property); 
16

Bạn có thể làm điều đó bằng So sánh đại biểu, sử dụng Sort(Comparision<T> comparision) quá tải.

list.Sort((a, b) => a.StringProperty.CompareTo(b.StringProperty)); 
1
var list = new List<SomeClass>(); 
// add some instances of SomeClass to list 
list.Sort((x, y) => x.SomeProperty.CompareTo(y.SomeProperty)); 
0

Hãy chắc chắn bao gồm System.Collections.Generic và System.Linq.

List<myItemType> lst = new List<myItemType>(); 
    return lst.OrderBy(i => i.StringPropertyName); 
+0

Xin chào Jason - nó trả về một trường hợp liệt kê mà liệt kê sẽ Được ra lệnh. Tôi cho rằng bạn có thể làm lst = new List (lst.OrderBy (...)); – Brian

2

Chuyển đổi mã C#,

Nếu bạn có một đối tượng danh sách ABC với một S sở hữu chuỗi cho mỗi đối tượng trong danh sách,

Dim myList Như Danh sách mới (Tất ABC)

Dim a = From i In Mylist _ 
      Order By i.S Ascending 

bạn sẽ có kết quả trong một, đặt trên một trình lặp.

Các vấn đề liên quan