是否可以按值(降序)对字典进行排序,并且当值相等时按键(升序)对它们进行排序?
例子:
无序:(
键、值)
C、8
B、8
A、5
D、11
F、8有序:(
键、值)
D、11
B、8
C、8
F、8
A、5
在该示例中,键 B、C、D 具有相同的值。当我按值对字典进行排序时,这些键将不会按升序排列。我怎样才能做到这一点?我必须使用字典以外的东西吗?
是否可以按值(降序)对字典进行排序,并且当值相等时按键(升序)对它们进行排序?
例子:
无序:(
键、值)
C、8
B、8
A、5
D、11
F、8有序:(
键、值)
D、11
B、8
C、8
F、8
A、5
在该示例中,键 B、C、D 具有相同的值。当我按值对字典进行排序时,这些键将不会按升序排列。我怎样才能做到这一点?我必须使用字典以外的东西吗?
当你枚举 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);
不要费心将您的排序值存储回字典,因为字典没有隐式排序顺序。
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);