如何按键AND值排序字典(或类似的集合)?

时间:2013-06-24 16:19:25

标签: c# dictionary key-value

是否可以按值(降序)排序字典,当值相等时按键排序(升序)?

实施例:

  

无序:
(键,值)
C,8
B,8
A,5
D,11
  F,8

     

订购:
(键,值)
D,11
B,8
C,8
F,8
A,   5个

在该示例中,键B,C,D具有相同的值。当我按值排序字典时,这些键不会按升序排列。我怎样才能做到这一点?我是否必须使用除字典之外的其他内容?

2 个答案:

答案 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);