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

25

我有两个列表{ 7 3 5 }{9 8 1}

我想对我的第一个列表进行排序,并希望第二个列表具有与第一个列表给定的索引排列相同的顺序。

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

是否可以在单个LINQ语句中完成此操作?


1
所以,为了确保我理解正确,您想对第一个列表进行排序,并使第二个列表也按照该键进行排序? - James Michael Hare
1
真糟糕,Jon 比我先完成了...Zip 对此非常方便。 - James Michael Hare
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();

6
在68秒内回答这个问题,这有可能吗? - Aidan
19
@Aidan,“因为他是Jon Skeet,这就足够了... :-)” - James Michael Hare
3
他就像 Stack Overflow 的 Chuck Norris。 - Aidan
14
@Aidan笑道:“听起来像是一堆好笑的笑话啊……Jon Skeet不需要对列表进行排序,当Jon Skeet出现时它们自己就排好了。” - James Michael Hare
1
被Jon Skeet击败回答是一种荣誉。 - Matthew
显示剩余4条评论

10
你可以尝试使用Zip方法:http://msdn.microsoft.com/en-us/library/dd267698.aspx
var sortedPairs = list1
    .Zip(list2, (item1, item2) => new KeyValuePair<int, int>(item1, item2))
    .OrderBy(pair => pair.Key);

然后你可以通过以下方式获取第一个排序好的列表:

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

第二个列表按照:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接