2012-05-18 15 views
21

Ho due elenchi { 7 3 5 } e {9 8 1}.Come ordinare contemporaneamente 2 elenchi utilizzando LINQ?

Voglio ordinare la mia prima lista e voglio che la seconda lista abbia la stessa permutazione dell'indice fornita dalla prima lista.

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

E 'possibile fare questo in un unico prospetto LINQ?

+1

Quindi, per essere sicuro di essere chiaro, vuoi ordinare il primo elenco e anche il secondo elenco deve essere ordinato per quel tasto? –

+1

Sì, questa è la cosa. – Simon

+1

Accidenti, Jon mi ha battuto ... Zip è utile per quello. –

risposta

41

suona come si potrebbe desiderare:

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

Come è possibile rispondere a questa domanda in 68 secondi? – Aidan

+18

@Aidan, perché è Jon Skeet, 'ha detto ... :-) –

+3

Lui è come il Chuck Norris di SO – Aidan

10

Si potrebbe provare a utilizzare il metodo Zip:

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

allora si potrebbe ottenere il primo elenco ordinato per:

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

E la seconda lista di:

var sortedList2 = sortedPairs.Select(pair => pair.Value); 
Problemi correlati