是否有可能通過值(降序)對字典進行排序,以及當值相同時按鍵(升序)排序?如何通過鍵和值來定購字典(或類似的收藏)?
實施例:
無序:
(鍵,值)
C,8
B,8
A,5
d,11
女,8有序:
(key,value)
D,11
B,8
C,8
F,8
A,
在那個例子中,鍵B,C,D具有相同的值。當我按值排列詞典時,這些鍵不會按升序排列。我怎樣才能做到這一點?我需要使用字典以外的東西嗎?
是否有可能通過值(降序)對字典進行排序,以及當值相同時按鍵(升序)排序?如何通過鍵和值來定購字典(或類似的收藏)?
實施例:
無序:
(鍵,值)
C,8
B,8
A,5
d,11
女,8有序:
(key,value)
D,11
B,8
C,8
F,8
A,
在那個例子中,鍵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);
不要打擾將您的排序值存儲回字典中作爲字典沒有隱式排序順序。
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);
我還想補充一點,如果你要訪問此有序對多次你把.ToList()在它的結束。 :) – tsells