2013-06-24 50 views
2

是否有可能通過值(降序)對字典進行排序,以及當值相同時按鍵(升序)排序?如何通過鍵和值來定購字典(或類似的收藏)?

實施例:

無序:
(鍵,值)
C,8
B,8
A,5
d,11
女,8

有序:
(key,value)
D,11
B,8
C,8
F,8
A,

在那個例子中,鍵B,C,D具有相同的值。當我按值排列詞典時,這些鍵不會按升序排列。我怎樣才能做到這一點?我需要使用字典以外的東西嗎?

回答

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

不要打擾將您的排序值存儲回字典中作爲字典沒有隱式排序順序。

+0

我還想補充一點,如果你要訪問此有序對多次你把.ToList()在它的結束。 :) – tsells

1

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