我有两个列表,一个是位置变量(和其他东西,但这是其中的重要部分),另一个列出了我需要排序的元素。是否可以使用OrderBy在第一个列表中按位置变量对第二个列表进行排序?
我可以正常排序,但我对OrderBy的运作很好奇,所以我想尝试一下。
谢谢!
答案 0 :(得分:2)
正确的方法是将两个列表压缩连接在一起 - zip join是一个连接,它将两个序列放在一起,就像拉链的两半一样,因此得名。假设您有一个分数列表和一个播放器列表,scores[i]
对应players[i]
所有i
,并且您希望按分数对玩家进行排序:< / p>
List<int> scores = whatever;
List<Player> players = whatever;
List<Player> sortedPlayers = players
.Zip(scores, (player, score) => new { player, score })
.OrderBy(pair => pair.score)
.Select(pair => pair.player)
.ToList();
按照每个步骤进行操作。
我们已经完成了。
替代解决方案:上述解决方案适用于任何对应的序列对。如果序列是索引,那么我们可以使用这个替代解决方案:
List<int> scores = whatever;
List<Player> players = whatever;
List<Player> sortedPlayers = players
.Select((player, index) => new { player, index })
.OrderBy(pair => scores[pair.index])
.Select(pair => pair.player)
.ToList();
再次,请继续:
答案 1 :(得分:-1)
如果我理解你,你可以做以下事情:
IEnumerator<int> position = listWithPositions.GetEnumerator();
var sortedList = listToSort.OrderBy(p =>
{
position.MoveNext();
return position.Current;
}
).ToList<Object>();
修改:我需要补充一点,这不是一种好习惯,您可能需要考虑在SortedDictionary中组织数据。