如何按值对字典进行排序?

948

我经常需要对一个字典(包含键和值)按值进行排序。例如,我有一个单词和相应频率的哈希表,我想按频率排序。

有一个SortedList适用于单个值(比如频率),我想将其映射回单词。

SortedDictionary按键而不是值进行排序。一些人会使用自定义类,但是否有更简洁的方法呢?


2
除了仅仅对字典进行排序(如已接受的答案所述),您还可以创建一个IComparer来完成此操作(确实它接受要比较的键,但是有了键,您就可以获取值)。;-) - BrainSlugs83
3
“创建一个IComparer”并不是一个完整的解决方案。请说明如何使用该IComparer来产生排序结果。 - ToolmakerSteve
2
排序的字典没有意义,因为你是通过键来访问字典的。如果你想要一个按键和值排序的列表,请将其转换为列表,然后进行排序。 - Yarek T
你可以通过多种方式访问 yearek T,其中包括使用 ElementAt(int index) 方法。此外,你还可以使用 foreach 循环来按索引迭代。 - Barreto
22个回答

-2

您可以按值对字典进行排序,并使用以下代码在字典中获取结果:

Dictionary <<string, string>> ShareUserNewCopy = 
       ShareUserCopy.OrderBy(x => x.Value).ToDictionary(pair => pair.Key,
                                                        pair => pair.Value);                                          

8
将排序后的项目放回字典中时,在枚举新字典时它们不再保证是有序的。 - Marty Neal
3
为什么在已经有答案的情况下,你还要添加这个答案? - nawfal

-2

假设你有一个字典,你可以使用下面的一行代码直接按值对它们进行排序:

var x = (from c in dict orderby c.Value.Order ascending select c).ToDictionary(c => c.Key, c=>c.Value);

4
这个答案是不正确的,因为生成的字典不能保证有序。 - O. R. Mapper

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