如何按关键字AND值对Dictionary(或类似Collection)进行排序



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

示例:

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

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

在该示例中,键B、C、D具有相同的值。当我按值对字典排序时,这些键不会按升序排列。我该怎么做?我必须用字典以外的东西吗?

当您枚举一个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);

不要麻烦将排序后的值存储回Dictionary,因为Dictionary没有隐含的排序顺序。

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