如果这个问题已经得到解答,但我的搜索没有返回我正在寻找的内容,我深表歉意。
我需要的是一种对字符串列表进行排序的方法,但是排序需要通过列表中字符串的子字符串(包含)来完成。
例如:
R10.14_R15.2.2b - Upgrade - Even
R10.14_R15.2.2c - Upgrade - Odd
R10.14_R15.2.2 - Upgrade - Prx
这些是列表项。顺序必须始终(不区分大小写):
所以排序后上面的列表应该是这样的:
R10.14_R15.2.2 - Upgrade - Prx
R10.14_R15.2.2c - Upgrade - Odd
R10.14_R15.2.2b - Upgrade - Even
此外,列表中的字符串并不总是遵循相同的模式,“PRX”、“ODD”、“EVEN”子字符串可以出现在字符串内部的任何位置。此外,字符串并不总是包含相同的数字。这就是为什么要求使用 contains 进行排序。
我尝试引入自定义 IComparer 类,但这种方法没有成功。 如有任何帮助,我们将不胜感激。
var strings = new List<string>{
"R10.14_R15.2.2b - Upgrade - Even",
"R10.14_R15.2.2c - Upgrade - Odd",
"R10.14_R15.2.2 - Upgrade - Prx"
};
var orderedStrings = strings.OrderBy(s => {
if(s.Contains("prx", StringComparison.OrdinalIgnoreCase)) return 1;
if(s.Contains("odd", StringComparison.OrdinalIgnoreCase)) return 2;
if(s.Contains("even", StringComparison.OrdinalIgnoreCase)) return 3;
return 4;
})