2012-05-18 39 views
21

Tôi có hai danh sách { 7 3 5 }{9 8 1}.Làm thế nào để đồng thời sắp xếp 2 danh sách bằng LINQ?

Tôi muốn sắp xếp danh sách đầu tiên của mình và tôi muốn danh sách thứ hai có cùng hoán vị chỉ mục như được đưa ra trong danh sách đầu tiên.

{3 5 7} =>{8 1 9}

Có thể thực hiện điều này trong một tuyên bố LINQ đơn?

+1

Vì vậy, để đảm bảo rằng tôi rõ ràng, bạn muốn sắp xếp danh sách đầu tiên và có danh sách thứ hai sắp xếp theo khóa đó không? –

+1

Vâng, đó là điều. – Simon

+1

Darn nó, Jon đánh bại tôi với nó ... Zip là tiện dụng cho điều đó. –

Trả lời

41

Âm thanh như bạn có thể muốn:

var list1 = new List<int> { 7, 3, 5 }; 
var list2 = new List<int> { 9, 8, 1 }; 

var orderedZip = list1.Zip(list2, (x, y) => new { x, y }) 
         .OrderBy(pair => pair.x) 
         .ToList(); 
list1 = orderedZip.Select(pair => pair.x).ToList(); 
list2 = orderedZip.Select(pair => pair.y).ToList(); 
+3

Làm cách nào để trả lời câu hỏi này trong 68 giây? – Aidan

+18

@Aidan, Bởi vì anh ấy là Jon Skeet, 'nuff nói ... :-) –

+3

Anh ấy giống như Chuck Norris của SO – Aidan

10

Bạn có thể thử bằng cách sử dụng Zip phương pháp:

var sortedPairs = list1 
    .Zip(list2, (item1, item2) => new KeyValuePair<int, int>(item1, item2)) 
    .OrderBy(pair => pair.Key); 

Sau đó, bạn có thể nhận được danh sách được sắp xếp đầu tiên theo:

var sortedList1 = sortedPairs.Select(pair => pair.Key); 

Và danh sách thứ hai theo:

var sortedList2 = sortedPairs.Select(pair => pair.Value); 
Các vấn đề liên quan