2011-03-03 165 views
15

如果我想用C#中的一個字典進行排序,其順序由它的鍵和它的值決定。按降序排列,按照其值排序,並在具有相同值的排序中按降序排列。似乎很有可能只按鍵或按價值排序,但兩者都很煩人。按鍵和值排序字典?

+3

對字典進行排序是不可能的,因爲字典在內部將數據存儲爲散列表,並且不能重新排序。您必須先將它轉換爲列表 – Andrey 2011-03-03 12:15:13

+0

準確地排序鍵的目的是什麼?你可以使用一些字典除外,然後你可以排序的關鍵和價值,除了我不是那個目的。如果您需要使用字典的Sorted Collection是一個不錯的選擇。 – 2011-03-03 12:16:51

+1

如果有幫助,請接受提問。 – 2014-05-20 11:12:06

回答

22
using System.Linq; 
... 
IOrderedEnumerable<KeyValuePair<TKey, TValue>> sortedCollection = myDictionary 
        .OrderByDescending(x => x.Value) 
        .ThenByDescending(x => x.Key); 
+4

'ThenBy'可能是? – Andrey 2011-03-03 12:17:54

+0

@Andrey是的,謝謝,我相應地更改了代碼。 – 2011-03-03 12:24:15

+2

上次「ToDistionary」的原因是什麼?字典**不能**排序。你破壞了排序的效果。 – Andrey 2011-03-03 12:33:36

1

如果您需要更復雜的排序方案,實施的IComparer>在排序依據或OrderByDescending的重載版本使用。