Soru LINQ kullanarak aynı anda 2 liste nasıl sıralanır?


İki tane listelem var { 7 3 5 } ve {9 8 1}.

İlk listemi sıralamak istiyorum ve ikinci listenin ilk liste tarafından verilen aynı dizin permütasyonuna sahip olmasını istiyorum.

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

Bunu tek bir LINQ ifadesinde yapmak mümkün mü?


21
2018-05-18 15:19


Menşei


Bu yüzden, emin olduğumdan emin olmak için, ilk listeyi sıralamak ve ikinci listeyi bu tuşa göre sıralamak ister misiniz? - James Michael Hare
Evet, işte bu. - Simon
Darn et, Jon beni dövdü ... Zip bunun için kullanışlı. - James Michael Hare


Cevaplar:


İstediğiniz gibi geliyor:

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

41
2018-05-18 15:21



Bu soruyu 68 saniyede nasıl cevaplamak mümkün? - Aidan
@Aidan, Çünkü o Jon Skeet, 'nuff dedi ki ... :-) - James Michael Hare
O Chuck Chuck Norris gibi - Aidan
@Aidan: Hah! İyi bir şakalar dizisi gibi görünüyor ... Jon Skeet, kendilerini sıralayan Jon Skeet'in listelerini sıralamaya gerek yok. - James Michael Hare
meta.stackexchange.com/questions/9134/jon-skeet-facts - Sani Singh Huttunen


Kullanarak deneyebilirsiniz Zip yöntem:

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

Sonra ilk sıralanmış listeyi alabilirsiniz:

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

Ve ikinci listeye göre:

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

10
2018-05-18 15:23