C# 如何使用string.split对具有特定格式的字符串列表进行排序?
我正在接收具有以下格式文件名的文件:C# 如何使用string.split对具有特定格式的字符串列表进行排序?,c#,linq,C#,Linq,我正在接收具有以下格式文件名的文件:文件1242161\u 08112019010101PM和文件1710485\u 08112019111721AM我需要按照字符串第三部分的日期时间顺序处理这些文件。我还希望能够处理不遵循此特定格式的文件,例如:文件\u 666840 List<string> sorted = filenames.OrderByDescending(file => file.Name.Split('_').Count()) .
文件1242161\u 08112019010101PM和文件1710485\u 08112019111721AM
我需要按照字符串第三部分的日期时间顺序处理这些文件。我还希望能够处理不遵循此特定格式的文件,例如:
文件\u 666840
List<string> sorted = filenames.OrderByDescending(file => file.Name.Split('_').Count())
.ThenBy(file => file.Name.Split('_').LastOrDefault().ToList());
我想将列表从最早的datetime排序到最晚的datetime,如果没有datetime,则按文件名排序移动到列表的底部。我尝试了以下方法:List<string> sorted = filenames.OrderByDescending(file => file.Name.Split('_').Count())
.ThenBy(file => file.Name.Split('_').LastOrDefault().ToList());
List sorted=filenames.OrderByDescending(file=>file.Name.Split(“”“).Count())
.ThenBy(file=>file.Name.Split(“”“).LastOrDefault().ToList());
这让我几乎一直到那里,但AM/PM排序不正确。带有01:01:01 PM的文件名将在上午11:17:21之前显示,原因很明显。实现我想要的东西最有效、最简单的方法是什么?只需使用格式mmddyyyhhmmstt
,然后选择a或什么
将日期和时间的指定字符串表示形式转换为其
日期时间等价物。必须指定字符串表示形式的格式
完全匹配指定的格式或引发异常
由于这是分开的,你可以按你喜欢的方式订购,这只是一个例子
给定的
var list = new List<string>()
{
"File_1242161_08112019010101PM",
"File_1710485_08112019111721AM",
"File_1710488",
"File_1710489",
"File_1710480"
};
结果
File_1710485_08112019111721AM
File_1242161_08112019010101PM
File_1710480
File_1710488
File_1710489
注意:为了清晰起见,我使用了显式命名元组,您可能会让它看起来更简洁
注2:关于性能,还有其他解决方案。。。但是,除非您正在解码数百万个文件,否则您会发现获取文件名的调用超过了例行程序的成本
File_1710485_08112019111721AM
File_1242161_08112019010101PM
File_1710480
File_1710488
File_1710489