2

是否可以按值(降序)对字典进行排序,并且当值相等时按键(升序)对它们进行排序?

例子:

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

有序:(
键、值)
D、11
B、8
C、8
F、8
A、5

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

4

2 回答 2

1

当你枚举 aDictionary<TKey,TValue>时,你会得到一堆KeyValuePair<TKey,TValue>... 特别Dictionary<TKey,TValue> 是 is IEnumerable<KeyValuePair<TKey,TValue>>,所以你可以在这个(无序的)序列上使用 Linq:

var orderedKeyValuePairs =
     myDic.OrderByDescending(kv => kv.Value).ThenBy(kv => kv.Key);

不要费心将您的排序值存储回字典,因为字典没有隐式排序顺序。

于 2013-06-24T16:20:41.533 回答
1

ADictionary<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);
于 2013-06-24T16:21:26.940 回答