在 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));
为了概览,我的预订程序中有一个包含多个 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));