2012-05-18 25 views
21

Tengo dos listas { 7 3 5 } y {9 8 1}.¿Cómo ordenar simultáneamente 2 listas usando LINQ?

Quiero ordenar mi primera lista y quiero que la segunda lista tenga la misma permutación de índice que figura en la primera lista.

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

¿Es posible hacer esto en una sola declaración de LINQ?

+1

Por lo tanto, para asegurarse de que estoy claro, ¿desea ordenar la primera lista, y tener la segunda lista ordenar por esa clave también? –

+1

Sí, esa es la cosa. – Simon

+1

Maldición, Jon me ganó ... Zip es útil para eso. –

Respuesta

41

suena como usted puede ser que desee:

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

¿Cómo es posible responder esta pregunta en 68 segundos? – Aidan

+18

@Aidan, porque él es Jon Skeet, 'nuff dijo ... :-) –

+3

Él es como Chuck Norris de SO – Aidan

10

Usted podría tratar de usar la Zip método:

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

Posteriormente, se podría conseguir la primera lista ordenada por:

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

Y la segunda lista por:

var sortedList2 = sortedPairs.Select(pair => pair.Value); 
Cuestiones relacionadas