是否可以按值(降序)排序字典,当值相等时按键排序(升序)?
实施例:
无序:
(键,值)
C,8
B,8
A,5
D,11
F,8
订购:
(键,值)
D,11
B,8
C,8
F,8
A, 5个
在该示例中,键B,C,D具有相同的值。当我按值排序字典时,这些键不会按升序排列。我怎样才能做到这一点?我是否必须使用除字典之外的其他内容?
答案 0 :(得分:1)
当您枚举Dictionary<TKey,TValue>
时,您会收到一堆KeyValuePair<TKey,TValue>
...具体Dictionary<TKey,TValue>
IEnumerable<KeyValuePair<TKey,TValue>>
,所以你可以将Linq用于此(无序)序列:
var orderedKeyValuePairs =
myDic.OrderByDescending(kv => kv.Value).ThenBy(kv => kv.Key);
不要将您的有序值存储回字典中,因为字典没有隐式排序顺序。
答案 1 :(得分:1)
Dictionary<T,U>
内部无序。您可以通过LINQ以特定顺序获取值,但是:
var ordered = theDictionary.OrderByDescending(kvp => kvp.Value).ThenBy(kvp => kvp.Key);
// To print your ordered list
foreach(var entry in ordered)
Console.WriteLine("{0}, {1}", entry.Key, entry.Value);