具有多个排序条件的C#-排序字典

具有多个排序条件的C#-排序字典,c#,visual-studio,dictionary,C#,Visual Studio,Dictionary,我有一本词频字典,需要先按频率排序,然后按字母顺序排序(如果多个单词有相同的词数,它们将按字母顺序排序,而不是按两个单独的顺序排序) 词典以单词为关键字,以频率为值 我怎样才能做到这一点 提前感谢假设您首先需要最常用的单词,然后: foreach(var pair in theData.OrderByDescending(x => x.Value).ThenBy(x => x.Key)) { Console.WriteLine($"{pair.Key}: {pair.Valu

我有一本词频字典,需要先按频率排序,然后按字母顺序排序(如果多个单词有相同的词数,它们将按字母顺序排序,而不是按两个单独的顺序排序) 词典以单词为关键字,以频率为值

我怎样才能做到这一点


提前感谢

假设您首先需要最常用的单词,然后:

foreach(var pair in theData.OrderByDescending(x => x.Value).ThenBy(x => x.Key)) {
    Console.WriteLine($"{pair.Key}: {pair.Value}");
}

假设您首先需要最常用的单词,然后:

foreach(var pair in theData.OrderByDescending(x => x.Value).ThenBy(x => x.Key)) {
    Console.WriteLine($"{pair.Key}: {pair.Value}");
}

虽然字典不是有序集合,但如果您有字典以及如何从中获取有序集合,则可以使用LINQ轻松进行排序:

var ordered = values.OrderByDescending(_ => _.Value).ThenBy(_ => _.Key);

注意每次迭代
有序的
IEnumerable
时,排序都会再次发生,因此根据使用情况,您可能需要添加
ToList()
以获得具体的集合。

虽然字典不是有序集合,但如果您有字典以及从中获得有序集合的内容,您可以使用LINQ轻松进行订购:

var ordered = values.OrderByDescending(_ => _.Value).ThenBy(_ => _.Key);

注意每次迭代排序的
IEnumerable
时,排序都会重复,因此根据使用情况,您可能需要添加一个
ToList()
,以拥有一个具体的集合。

字典本质上是无序结构。如果您想订购,最好选择另一种结构。请出示示例字典。为什么要订字典?你试过什么?字典不是有序的集合。您可能希望改为使用..orderby().ThenBy()?字典本质上是无序结构。如果您想订购,最好选择另一种结构。请出示示例字典。为什么要订字典?你试过什么?字典不是有序的集合。您可能希望改为使用..orderby().ThenBy()?