如何在C#中按字符串包含的版本号对字符串列表进行降序排序
解决方案
你可以通过正则提取字符串中的版本号,结合Version类自带的排序能力实现需求,示例代码如下:
using System.Text.RegularExpressions; // 版本号匹配正则 var versionRegex = new Regex(@"\d+\.\d+\.\d+\.\d+"); // 排序逻辑可复用给所有同类列表 list0 = list0.OrderByDescending(o => { // All固定排在最后 if (o == "All") return 0; return 1; }).ThenByDescending(o => { if (o == "All") return new Version(0, 0, 0, 0); // 提取版本号并转为Version结构实现正确数值排序 var match = versionRegex.Match(o); return match.Success ? new Version(match.Value) : new Version(0, 0, 0, 0); }).ToList(); // 输出测试 foreach (var item in list0) { Console.WriteLine(item); }
代码说明
- 第一级排序先把
All放到列表末尾 - 第二级排序使用
Version结构进行比较,会自动按版本段的数值大小排序,不会出现字符串排序中12 < 3的错误 - 正则匹配兼容你给出的三种不同前缀的版本字符串格式,不需要额外处理前缀分隔符差异
输出效果(以list0为例)
和要求的预期结果完全一致:MAS_Prod_1.2107.0.12, MAS_Prod_1.2107.0.11, MAS_Prod_1.2107.0.10, MAS_Prod_1.2107.0.8, MAS_Prod_1.2107.0.7, MAS_Prod_1.2107.0.4, MAS_Prod_1.2107.0.3, All
内容的提问来源于stack exchange,提问作者Anand Kishore
相关产品推荐
相关产品推荐

