Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用string.split对具有特定格式的字符串列表进行排序?_C#_Linq - Fatal编程技术网

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