C# - 如何通过 linq 对列表字符串编号进行排序?

标签 c# string linq sorting

我有一个列表,列表中的每个元素都是一个包含特定格式的日期和整数的字符串:yyyyMMdd_number。

List<string> listStr = new List<string> { "20170822_10", "20170821_1", "20170823_4", "20170821_10", "20170822_11", "20170822_5",
                                          "20170822_2", "20170821_3", "20170823_6", "20170823_21", "20170823_20", "20170823_2"};

当使用方法listStr.Sort();

结果如下:

20170821_1
20170821_10
20170821_3
20170822_10
20170822_11
20170822_2
20170822_5
20170823_2
20170823_20
20170823_21
20170823_4
20170823_6

预期输出:

20170821_1
20170821_3
20170821_10
20170822_2
20170822_5
20170822_10
20170822_11
20170823_2
20170823_4
20170823_6
20170823_20
20170823_21

方法:我认为每个字符串(day_number)都会用下划线分隔,然后按数字进行比较和排序。 但是在这种情况下,请建议我使用 LINQ 解决方案或更好的排序方法。

最佳答案

由于日期采用可以按字典顺序排序的格式,您可以使用字符串排序按日期前缀排序,并通过解析整数来解决关系:

var sorted = listStr
    .OrderBy(s => s.Split('_')[0])
    .ThenBy(s => int.Parse(s.Split('_')[1]));

Demo.

关于C# - 如何通过 linq 对列表字符串编号进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45788512/

相关文章:

python - 从列表中创建一个新列表但没有重复项?

arrays - 如何将只有十个字符的字符串(例如 ."12345*45688")拆分为数组

c# - .NET 线程/接受 TCP 连接中导致 NullReferenceException 的原因是什么?

c# - 如何为多个项目更新 Nuget 包?

ios - Xpath 和引号下的字符串

c# - LINQ、Lambda、C#、扩展方法

c# - Linq Dynamic ParseLambda 未解析

c# - 如何使用 Entity Framework 6 将数学函数发送到 Sql Server

c# - 数据绑定(bind)到文本框不起作用

c# - 使用托管类方法作为回调