2010-05-26 47 views
9

Tôi đã có danh sách các bộ dữ liệu trong đó mỗi bộ bao gồm hai số nguyên và tôi muốn sắp xếp theo số nguyên thứ hai. Sau khi tìm kiếm trong python giúp tôi có được điều này:Cách sắp xếp danh sách theo phần tử tuple thứ 2 trong python và C#

sorted(myList, key=lambda x: x[1]) 

thật tuyệt vời. Câu hỏi của tôi là, có cách nào ngắn gọn như nhau để làm điều này trong C# (ngôn ngữ tôi phải làm việc)? Tôi biết câu trả lời rõ ràng liên quan đến việc tạo các lớp và chỉ định một đại biểu vô danh cho toàn bộ bước so sánh nhưng có lẽ cũng có một cách định hướng LINQ. Cảm ơn trước cho các đề nghị.

Trả lời

6

Giả sử rằng các danh sách các hàng có một loại IEnumerable<Tuple<int, int>> (một chuỗi các tuples đại diện sử dụng Tuple<..> lớp từ .NET 4.0), bạn có thể viết bằng cách sử dụng phương pháp khuyến nông LINQ sau:

var result = myList.OrderBy(k => k.Item2); 

Trong mã k.Item2 trả về thành phần thứ hai của bộ tuple - trong C#, đây là thuộc tính (vì mục truy cập theo chỉ mục sẽ không an toàn kiểu nói chung). Nếu không, tôi nghĩ rằng mã là khá ngắn gọn (cũng nhờ ký hiệu hàm lambda đẹp).

Sử dụng cú pháp truy vấn LINQ, bạn có thể viết nó như thế này (mặc dù phiên bản đầu tiên là IMHO dễ đọc hơn và chắc chắn gọn gàng hơn):

var result = from k in myList orderby k.Item2 select k; 
+0

Cảm ơn bạn rất mong được nâng cấp lên 4.0 sớm –

+0

@Damian: Điều này cũng hoạt động trong C# 3.0, nhưng bạn cần triển khai 'Tuple ' của riêng mình (nó chỉ là một lớp đơn giản với hai thuộc tính của các kiểu generic 'T1 Item1 {get; set;}' và 'T 2 Item2 {get; bộ; } ' –

14

Một cách khác để làm điều đó trong python là này

from operator import itemgetter 
sorted(myList, key=itemgetter(1)) 
+0

cổ vũ tôi không biết về itemgetter –

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