2012-04-24 54 views
2

排序字典我有這個字典如何通過DateTime值

Dictionary<Guid, DateTime> myDic = new Dictionary<Guid, DateTime>(); 

什麼是日期時間對它進行排序DESC最好的方法?它是LINQ嗎?

它如何在代碼中完成?

謝謝!

+0

可能的重複http://stackoverflow.com/questions/289/how-do-you-sort-a-c-sharp-dictionary-by-value – MilkyWayJoe 2012-04-24 01:49:13

+0

排序是什麼? 「Guid」? 'DateTime'?或者'KeyValuePair <,>'? – Enigmativity 2012-04-24 01:52:23

+0

是的,對'DateTime' – 2012-04-24 01:59:26

回答

4

你有錯誤的數據結構來實現你想要的。字典的目的是通過密鑰提供快速訪問。 SortedDictionary存在對自己的鍵進行排序,但沒有字典對其值進行排序,因爲這沒有意義。

假設所有你需要的是包含在myDic的DateTime是否降序排序,你可以這樣做:

var dateTimesDescending = myDic.Values.OrderByDescending(d => d); 

,讓你列舉降序排列的值,但不會排序字典

6

不依賴於目前執行的細節不能排序Dictionary,但你可以使用LINQ的排序功能在任何特定的順序處理它的條目:

foreach (KeyValuePair<Guid,DateTime> pair in myDict.OrderByDescending(p => p.Value)) { 
    // do some processing 
} 

純粹作爲一種好奇心,你可以通訂購鍵值對Dictionary的構造函數,並且生成的字典將按順序列舉項目在枚舉中提供給構造函數的順序。但是,依靠這個功能是非常危險的;你不應該在你的代碼中做。