自定义列表按字符串的一部分排序

问题描述 投票:0回答:1

如果这个问题已经得到解答,但我的搜索没有返回我正在寻找的内容,我深表歉意。

我需要的是一种对字符串列表进行排序的方法,但是排序需要通过列表中字符串的子字符串(包含)来完成。

例如:

R10.14_R15.2.2b - Upgrade - Even
R10.14_R15.2.2c - Upgrade - Odd
R10.14_R15.2.2 - Upgrade - Prx

这些是列表项。顺序必须始终(不区分大小写):

  1. 包含“PRX”子字符串的字符串。
  2. 包含“ODD”子字符串的字符串。
  3. 包含“EVEN”子字符串的字符串。

所以排序后上面的列表应该是这样的:

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 类,但这种方法没有成功。 如有任何帮助,我们将不胜感激。

c# list sorting
1个回答
0
投票
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;
})
© www.soinside.com 2019 - 2024. All rights reserved.