如何使用LINQ同时对2个列表进行排序?

Sim*_*mon 21 c# linq

我有两个清单{ 7 3 5 }{9 8 1}.

我想排序我的第一个列表,我希望第二个列表具有与第一个列表给出的相同的索引排列.

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

是否可以在单个LINQ语句中执行此操作?

Jon*_*eet 41

听起来你可能想要:

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();
Run Code Online (Sandbox Code Playgroud)

  • @Aidan,因为他是Jon Skeet,'nuff说...... :-) (19认同)
  • @Aidan:哈!听起来像是一个很好的笑话...... Jon Skeet不需要对列表进行排序,当Jon Skeet到达时他们会对自己进行排序. (12认同)
  • 怎么可能在68秒内回答这个问题? (4认同)
  • 他就像SO的查克诺里斯 (3认同)

Mat*_*hew 10

您可以尝试使用该Zip方法:

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

然后你可以得到第一个排序列表:

var sortedList1 = sortedPairs.Select(pair => pair.Key);
Run Code Online (Sandbox Code Playgroud)

第二个列表:

var sortedList2 = sortedPairs.Select(pair => pair.Value);
Run Code Online (Sandbox Code Playgroud)