2012-05-18 13 views
21

Mam dwie listy: { 7 3 5 } i {9 8 1}.Jak jednocześnie sortować 2 listy za pomocą LINQ?

Chcę posortować moją pierwszą listę i chcę, aby druga lista miała taką samą permutację indeksu, jak podano na pierwszej liście.

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

Czy da się to zrobić w jednej instrukcji LINQ?

+1

Aby się upewnić, że chcesz posortować pierwszą listę, a druga sortuje również według tego klucza? –

+1

Tak, właśnie o to chodzi. – Simon

+1

Przepraszam, Jon mnie pobił ... Zip jest na to przydatny. –

Odpowiedz

41

Brzmi jak możesz:

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

Jak można odpowiedzieć na to pytanie w 68 sekund? – Aidan

+18

@Aidan, Bo to Jon Skeet, 'nuff powiedział ... :-) –

+3

On jest jak Chuck Norris z SO – Aidan

10

można spróbować przy użyciu metody Zip:

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

Następnie można dostać pierwszy posortowaną listę:

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

I druga lista:

var sortedList2 = sortedPairs.Select(pair => pair.Value); 
Powiązane problemy