按键和值对字典进行排序?

19

如果我想在C#中按照字典的键和值来确定顺序进行排序,该怎么办呢?例如按值降序排列,在具有相同值的情况下按键降序排列。似乎只按键或只按值进行排序是很容易的,但两者都要考虑却很麻烦。


3
由于字典内部数据存储为哈希表,所以无法对其进行排序。您需要先将其转换为列表。 - Andrey
排序键的目的是什么?您可以使用除字典以外的一些东西,然后对键和值进行排序,但我不知道这样做的目的。如果您需要一个已排序的集合,则使用字典是一个糟糕的选择。 - Security Hound
1
如果有帮助,请接受答案。 - Dennis Traub
2个回答

30
using System.Linq;
...
IOrderedEnumerable<KeyValuePair<TKey, TValue>> sortedCollection = myDictionary
                    .OrderByDescending(x => x.Value)
                    .ThenByDescending(x => x.Key);

2
最后一个 ToDictionary 的原因是什么?字典是不能被排序的。你会破坏排序的效果。 - Andrey
@Andrey 我肯定应该在发布代码之前进行测试!你再次是正确的。ToDictionary根本没有任何意义。IOrderedEnumerable<KeyValuePair<TKey, TValue>>应该足够了。 - Dennis Traub
3
@nawfal 的意思是使用 var - Jeppe Stig Nielsen
@nawfal 感谢翻译。我故意没有使用 var,这样 OP(和其他可能经验不足的开发人员)可以一眼看到返回类型。我尽量让我的答案尽可能有帮助性,即使最终的代码有时可能不太符合惯用语法。 - Dennis Traub
我明白了。我并不是在批评你,只是想指出你的努力 :) - nawfal

1
如果您需要更复杂的排序方案,请实现一个IComparer>,并在OrderBy或OrderByDescending的重载版本中使用它。

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