使用 Times C# 对列表 <string> 进行排序
Sorting a List<string> with Times C#
我有一个List<string>
,时间如下:
8:00 AM
8:15 AM
8:30 AM....
3:00 PM
3:15 PM....
11:45 PM
12:00 AM
有办法解决这个问题吗?内置的东西还是我必须为此写一些定制的东西。
有什么建议吗?
考虑 OrderBy:
List<string> list = new List<string>() {"8:00AM", "4:00AM", "2:00AM", "3:14PM"};
List<string> sortedList = list.OrderBy(s => DateTime.Parse(s)).ToList();
AlexD 的答案是正确的,但是使用 ParseExact
和提供的实际模式比 Parse
快得多。从逻辑上讲,你提供了如何解析它,它更快,这里还有一篇解决这个问题的博文,DateTime parsing performance
const string Pattern = "h:mm tt";
void Sort()
{
var Times = new string[]
{
"8:00 AM",
"8:15 AM",
"8:30 AM",
"3:00 PM",
"3:15 PM",
"11:45 PM",
"12:00 AM"
};
var Dates = Times.OrderBy(x => DateTime.ParseExact(x, Pattern, CultureInfo.InvariantCulture));
}
或者如果您想要最快的解析 TryParseExact
,您必须创建一个完整的委托方法而不是简单的 lambda。
var Dates = Times.OrderBy(x =>
{
DateTime date;
DateTime.TryParseExact(x, Pattern, CultureInfo.InvariantCulture, DateTimeStyles.None, out date);
return date;
});
我有一个List<string>
,时间如下:
8:00 AM
8:15 AM
8:30 AM....
3:00 PM
3:15 PM....
11:45 PM
12:00 AM
有办法解决这个问题吗?内置的东西还是我必须为此写一些定制的东西。
有什么建议吗?
考虑 OrderBy:
List<string> list = new List<string>() {"8:00AM", "4:00AM", "2:00AM", "3:14PM"};
List<string> sortedList = list.OrderBy(s => DateTime.Parse(s)).ToList();
AlexD 的答案是正确的,但是使用 ParseExact
和提供的实际模式比 Parse
快得多。从逻辑上讲,你提供了如何解析它,它更快,这里还有一篇解决这个问题的博文,DateTime parsing performance
const string Pattern = "h:mm tt";
void Sort()
{
var Times = new string[]
{
"8:00 AM",
"8:15 AM",
"8:30 AM",
"3:00 PM",
"3:15 PM",
"11:45 PM",
"12:00 AM"
};
var Dates = Times.OrderBy(x => DateTime.ParseExact(x, Pattern, CultureInfo.InvariantCulture));
}
或者如果您想要最快的解析 TryParseExact
,您必须创建一个完整的委托方法而不是简单的 lambda。
var Dates = Times.OrderBy(x =>
{
DateTime date;
DateTime.TryParseExact(x, Pattern, CultureInfo.InvariantCulture, DateTimeStyles.None, out date);
return date;
});