在 C# 中根据日期排序子字符串

Ordering substrings according to date in C#

为了概览,我的预订程序中有一个包含多个 ID 的大字符串。

string example = "ID01-20/05-Table1\n ID02-04/06-Table2\n ID03-21/05-Table1\n"

这只是一个示例,但字符串可能会随着预订的删除或添加而变大或变小。

目前,概览是根据 ID 排序的,但是否也可以使用日期或表格?

所以它看起来是:

string example = "ID01-20/05-Table1\n ID03-21/05-Table1\n ID02-04/06-Table2\n"

最好使用 Console.Display();但我也不介意使用某些东西来生成临时 string/list/array/whatever 并以这种方式显示它。

我在静态字符串上看到过它,但我不太确定在添加和删除 ID 时它会如何工作。

您可以将初始字符串拆分成块

.Split('\n')

正则表达式的帮助下匹配每个块中的日期部分:

// one or two digits followed by slash and then one or two digits
Regex.Match(item, "[0-9]{1,2}/[0-9]{1,2}").Value

将其解析为日期

DateTime.TryParseExact(
   ...         
  "d/M", // day / Month format 
   null, 
   DateTimeStyles.AssumeLocal, 
   out var date)

然后为它订购。

代码:

  using System.Linq;
  using System.Text.RegularExpressions;

  ...

  string example = "ID01-20/05-Table1\n ID02-04/06-Table2\n ID03-21/05-Table1\n";

  string result = string.Join("\n", example
    .Split('\n')
    .OrderBy(item => DateTime.TryParseExact(
           Regex.Match(item, "[0-9]{1,2}/[0-9]{1,2}").Value,
          "d/M", 
           null, 
           DateTimeStyles.AssumeLocal, 
           out var date)
       ? date
       : DateTime.MaxValue));