假设我有以下两个列表。

var unscoredList = new List<string> { "John", "Robert", "Rebecca" };

var scoredList = new List<WordScore>
{
    new WordScore("John", 10),
    new WordScore("Robert", 40),
    new WordScore("Rebecca", 30)
};


有什么方法可以按unscoredList中的值对scoredList中的值进行排序,其中得分最高的单词在unscoredList中首先出现?

如果需要,下面是WordScore类。

public class WordScore {
    public string Word;
    public int Score;

    public WordScore(string word, int score) {
        Word = word;
        Score = score;
    }
}

最佳答案

如果不需要就地排序,则可以执行以下操作:

var scoreLookup = scoredList.ToDictionary(l => l.Word, l => l.Score);

var result = unscoredList.OrderByDescending(l => scoreLookup[l]);


或者,您可以使用:

unscoredList.Sort((l,r) => scoreLookup[r].CompareTo(scoreLookup[l]));


当然,应该进行一些完整性检查(scoredList中的值重复,unscoredList中的值不在scoredList中,等等)。

09-17 19:58