20 votos

Cómo simultáneamente tipo 2 listas usando LINQ?

Tengo dos listas de { 7 3 5 } y {9 8 1}.

Quiero ordenar mi primera lista y quiero que el segundo de la lista tienen el mismo índice de permutación dada por el primero de la lista.

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

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

38voto

Jon Skeet Puntos 692016

Suena como que usted podría desear:

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();

8voto

Matthew Puntos 6516

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

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

A continuación, usted podría conseguir la primera lista ordenada por:

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

Y el segundo de la lista:

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

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X