2009-03-06 43 views
20

Tôi có một loạt các mục và tôi muốn sắp xếp theo một trong các thuộc tính của chúng. Tôi có thể truy cập thuộc tính mục bằng cách sử dụng "item.Fields [" FieldName "]. Giá trị" thuộc tính được trả về dưới dạng chuỗi nhưng tôi có thể truyền nó thành int.Sắp xếp mảng các mục bằng OrderBy <>

Tôi đã xem xét OrderBy <> nhưng tôi không biết cách sử dụng nó.

Trả lời

41

Để rõ ràng, OrderBy sẽ không sắp xếp mảng tại chỗ - nó sẽ trả về một chuỗi mới được sắp xếp sao chép của mảng. Nếu đó là okay, sau đó bạn muốn một cái gì đó như:

var sorted = array.OrderBy(item => item.Fields["FieldName"].Value); 

Mặt khác, tôi không hiểu bình luận của bạn rằng tài sản được trả về như là một chuỗi nhưng điều đó bạn có thể bỏ nó vào một int - bạn không thể tạo chuỗi thành int, bạn phải phân tích cú pháp chúng. Nếu đó là những gì bạn có nghĩa là, có thể bạn muốn:

var sorted = array.OrderBy(item => int.Parse(item.Fields["FieldName"].Value)); 

Nếu bạn muốn điều đó như một mảng, bạn có thể gọi ToArray() sau:

var sorted = array.OrderBy(item => int.Parse(item.Fields["FieldName"].Value)) 
        .ToArray(); 

Hoặc bạn có thể sử dụng Array.Sort nếu bạn muốn sắp xếp trong- nơi, nhưng điều đó sẽ hơi lộn xộn hơn.

+0

@skeet tôi đang gặp phải vấn đề gần như giống nhau và tôi đã đăng câu hỏi cũng http://stackoverflow.com/questions/11693827/sorting-on-generic-list-after -using-toarray-method – rahularyansharma

+0

Cảm ơn, Jon. Điều cần biết đó là một hoạt động không phá hoại –

+0

bạn phải đưa thư viện nào cho người dùng 'OrderBy'? – AlbatrossCafe

5

Nếu bạn có thể sử dụng đơn đặt hàng, nó phải dễ dàng, hãy thử các bước sau. Tôi đã ném vào int.Parse mặc dù tùy thuộc vào cách bạn thực sự muốn sắp xếp điều này có thể không được yêu cầu.

var sorted = array.OrderBy(item => int.Parse(item.Fields["FieldName"].Value)); 
4
var sortedArray = items.OrderBy(i => i.property).ToArray(); 

Nếu bạn không muốn một mảng, bạn có thể rời khỏi rằng tắt trong trường hợp này bạn sẽ có một <> của loại mục IEnumerable.

7

Sử dụng Sắp xếp phương pháp để sắp xếp một mảng:

Array.Sort(theArray, (a, b) => String.Compare(a.Fields["FieldName"].Value, b.Fields["FieldName"].Value)); 

Nếu bạn không sử dụng C# 3, bạn sử dụng một đại biểu thay vì một biểu thức lambda:

Array.Sort(theArray, delegate(Item a, Item b) { return String.Compare(a.Fields["FieldName"].Value, b.Fields["FieldName"].Value); }); 

(Điều này cũng làm việc với khung 2, mà phần mở rộng OrderBy không.)

+0

một dòng mã, không có biến phụ. điều này thực sự là câu trả lời. – toddmo

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