如何按DateTime值对字典进行排序

Dev*_*per 3 .net c# linq dictionary

我有这本词典

Dictionary<Guid, DateTime> myDic = new Dictionary<Guid, DateTime>();
Run Code Online (Sandbox Code Playgroud)

使用DateTimeDESC进行排序的最佳方法是什么?是LINQ吗?

如何在代码中完成?

谢谢!

das*_*ght 6

如果Dictionary不依赖当前实现的细节,则无法对其进行排序,但您可以使用LINQ的排序功能以任何特定顺序处理其条目:

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

纯粹作为好奇心,您可以将有序键值对传递给Dictionary构造函数,结果字典将按照枚举中提供给构造函数的顺序枚举.但是,依靠这种功能是非常危险的; 你不应该在你的代码中这样做.


Asi*_*sik 5

您有错误的数据结构来实现您想要的.字典的目的是通过密钥提供快速访问.存在SortedDictionary对其自己的键进行排序,但是没有字典对其值进行排序,因为这没有意义.

假设您需要的是myDic中包含的DateTimes降序,您可以这样做:

var dateTimesDescending = myDic.Values.OrderByDescending(d => d);
Run Code Online (Sandbox Code Playgroud)

这将允许您按降序枚举值,但不会对字典进行排序.