gpt4 book ai didi

c# - 按数字排序字符串列表

转载 作者:太空宇宙 更新时间:2023-11-03 21:07:30 24 4
gpt4 key购买 nike

我有以下字符串列表:

List<string> a = new List<string>();

a.Add("2015");
a.Add("2015 /M1");
a.Add("2015 /M2");
a.Add("2015 /M9");
a.Add("2015 /M10");
a.Add("2015 /M11");
a.Add("2015 /M12");
a.Add("2015 /M3");
a.Add("2015 /M4");
a.Add("2015 /M5");
a.Add("2015 /M6");
a.Add("2015 /M7");
a.Add("2015 /M8");

当我调用排序函数 a.sort() 时,它排序如下:

2015
2015 /M1
2015 /M11
2015 /M12
2015 /M2
2015 /M3
2015 /M4
2015 /M5
2015 /M6
2015 /M7
2015 /M8
2015 /M9

但是我该如何修改才能使它看起来像下面这样。

2015
2015 /M1
2015 /M2
2015 /M3
2015 /M4
2015 /M5
2015 /M6
2015 /M7
2015 /M8
2015 /M9
2015 /M10
2015 /M11
2015 /M12

我在其他列表项中也有相同的模式,例如 2015 Q/12、2015 Q/11 等。

最佳答案

您需要从字符串中提取数字,这可以通过正则表达式来完成。然后将其转换为整数并按其排序。

var e = from s in a
let g = Regex.Match(s, @"^\d+(?: \/[MQ](\d+))?$")
let n = g.Groups[1].Value != "" ? int.Parse(g.Groups[1].Value) : (int?)null
orderby n
select s;

a = e.ToList();

编辑

先按年份排序,再用下面的代码

var e = from s in a
let g = Regex.Match(s, @"^[A-Za-z]*(\d+)(?: \/[MQ](\d+))?$")
let y = g.Groups[1].Value != "" ? int.Parse(g.Groups[1].Value) : 0
let m = g.Groups[2].Value != "" ? int.Parse(g.Groups[2].Value) : 0
orderby y, m
select s;

关于c# - 按数字排序字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40254115/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com