C#排序按日期字符串列出键值对

本文关键字:键值对 字符串 日期 排序 | 更新日期: 2023-09-27 18:00:09

已解决

键值对的字符串

List<KeyValuePair<string, string>> responses = new List<KeyValuePair<string, string>>();

是这样的:2011-6-8 2:19:0|| url

我使用以下方法对列表进行了排序:

responses.OrderByDescending(s => DateTime.Parse(s.Key.Split(new string[] { " || " }, StringSplitOptions.None)[0])).ToList();

感谢大家的快速回复。

问题:

我有一个包含键值对的列表,如下所示:

List<KeyValuePair<string, string>> responses = new List<KeyValuePair<string, string>>();

字符串键将是一个日期时间戳和url的串联字符串。例如:2011年6月8日2:19:0-http://google.com/?q=somesearch

以下排序在一定程度上有效,但日期值是按字符串排序的,而不是按数字排序的(这并不意外)。

使用此代码:

responses.OrderByDescending(s => s.Key).ToList();

我要一些类似的东西:

2011-6-8 2:19:0 - url
2011-6-8 12:18:0 - url
2011-6-7 12:29:0 - url 
2011-6-6 17:42:0 - url
2011-6-6 12:39:0 - url
2011-6-5 10:31:0 - url
2011-6-3 20:53:0 - url
2011-6-21 9:1:0 - url

关于如何正确排序,有什么想法吗?

C#排序按日期字符串列出键值对

只需在日期格式中添加前导零:

dateTime.ToString("yyyy-MM-dd");

另一种选择(不确定是否可以做到)是在将日期转换为字符串之前提前对记录进行排序。

我同意上面的答案,如果你能控制输入,你应该改变它。如果你不能更改键值,我会拆分字符串——用更好的格式重新构建它并排序。

也许这样的东西可以工作(你必须在排序后将其按顺序放回一起):

Dictionary<DateTime, string> sortableKeys = new Dictionary<DateTime, string>();
foreach (string key in responses.Keys)
{
   string[] keySplit = key.Split(" - ");
   sortableKeys.Add(DateTime.Parse(keySplit[0], key));            
}

未测试…:)

您应该存储为日期/时间结构,或者有一个填充了0的可排序字符串(例如2011-06-06 09:21:03)

我会将您的Key强制转换为OrderByDescending Func中的DateTime,并使用内置的DateTime。比较以执行排序。

如果字符串不是有效的DateTime,这显然不能处理错误,但它会在没有任何字符串破解的情况下做正确的事情

responses.OrderByDescending(kvp => DateTime.Parse(kvp.Key));