24

と の 2 つのリストが{ 7 3 5 }あり{9 8 1}ます。

最初のリストをソートし、2 番目のリストに最初のリストと同じインデックス順列を持たせたいと考えています。

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

単一の LINQ ステートメントでこれを行うことは可能ですか?

4

2 に答える 2

43

あなたが望むかもしれないように聞こえます:

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();
于 2012-05-18T15:21:24.783 に答える
10

Zip次の方法を試すことができます。

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

次に、次の方法で最初にソートされたリストを取得できます。

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

そして2番目のリストは次のとおりです。

var sortedList2 = sortedPairs.Select(pair => pair.Value);
于 2012-05-18T15:23:49.467 に答える