对列表进行排序<;字符串>;与时代C#
我有一个对列表进行排序<;字符串>;与时代C#,c#,sorting,visual-studio-2012,C#,Sorting,Visual Studio 2012,我有一个列表,时间如下: 8:00 AM 8:15 AM 8:30 AM.... 3:00 PM 3:15 PM.... 11:45 PM 12:00 AM 有什么办法可以分类吗?内置的东西,或者我必须为此编写自定义的东西 有什么建议吗?考虑一下: List List=newlist(){“8:00AM”、“4:00AM”、“2:00AM”、“3:14PM”}; List-sortedList=List.OrderBy(s=>DateTime.Parse)).ToList(); AlexD的
列表
,时间如下:
8:00 AM
8:15 AM
8:30 AM....
3:00 PM
3:15 PM....
11:45 PM
12:00 AM
有什么办法可以分类吗?内置的东西,或者我必须为此编写自定义的东西
有什么建议吗?考虑一下:
List List=newlist(){“8:00AM”、“4:00AM”、“2:00AM”、“3:14PM”};
List-sortedList=List.OrderBy(s=>DateTime.Parse)).ToList();
AlexD的答案是正确的,但是使用提供的实际模式使用ParseExact
要比Parse
快得多。因为从逻辑上讲,你提供了如何解析它,速度更快,这里还有一篇博客文章解决了这个问题
或者,如果您想要最快的解析TryParseExact
,则必须创建一个完整的委托方法,而不是简单的lambda
var Dates = Times.OrderBy(x =>
{
DateTime date;
DateTime.TryParseExact(x, Pattern, CultureInfo.InvariantCulture, DateTimeStyles.None, out date);
return date;
});
您可以使用List.Sort方法(IComparer),编写一个比较器方法,或者尝试解析到日期的时间。解析“…”会带来麻烦……谢谢,工作得很好。@SaniHuttunen啊,我把
…
读作“日期时间字符串的其余部分”。如果按字面意思是…
,则必须调整按键功能。@AlexD:可以理解。也许这就是问题的答案。但从提供的数据来看,还有更多的工作要做…:)
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));
}
var Dates = Times.OrderBy(x =>
{
DateTime date;
DateTime.TryParseExact(x, Pattern, CultureInfo.InvariantCulture, DateTimeStyles.None, out date);
return date;
});