You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于指定子串包含规则的自定义字符串列表排序实现问询

按指定子串优先级排序字符串列表

核心思路是给每个字符串分配优先级权重,按权重从小到大排序,确保包含"PRX"的排在最前,其次是"ODD",最后是"EVEN",同时忽略大小写匹配子串。

实现方式一:LINQ OrderBy 结合自定义权重函数

这种方式简洁直观,适合快速实现:

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        var originalList = 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 sortedList = originalList.OrderBy(s => GetPriority(s)).ToList();

        // 输出验证
        foreach (var item in sortedList)
        {
            Console.WriteLine(item);
        }
    }

    // 定义优先级规则
    private static int GetPriority(string s)
    {
        if (s.IndexOf("PRX", StringComparison.OrdinalIgnoreCase) >= 0)
            return 0; // 最高优先级
        if (s.IndexOf("ODD", StringComparison.OrdinalIgnoreCase) >= 0)
            return 1;
        if (s.IndexOf("EVEN", StringComparison.OrdinalIgnoreCase) >= 0)
            return 2;
        return 3; // 其他字符串默认最低优先级,排在最后
    }
}

实现方式二:自定义IComparer

如果需要复用排序逻辑,或者在List.Sort()方法中使用,可以自定义比较器:

using System;
using System.Collections.Generic;

public class SubstringPriorityComparer : IComparer<string>
{
    public int Compare(string x, string y)
    {
        // 处理空字符串,默认放最后
        if (x == null && y == null) return 0;
        if (x == null) return 1;
        if (y == null) return -1;

        var priorityX = GetPriority(x);
        var priorityY = GetPriority(y);
        return priorityX.CompareTo(priorityY);
    }

    private static int GetPriority(string s)
    {
        if (s.IndexOf("PRX", StringComparison.OrdinalIgnoreCase) >= 0)
            return 0;
        if (s.IndexOf("ODD", StringComparison.OrdinalIgnoreCase) >= 0)
            return 1;
        if (s.IndexOf("EVEN", StringComparison.OrdinalIgnoreCase) >= 0)
            return 2;
        return 3;
    }
}

// 使用示例
class Program
{
    static void Main()
    {
        var originalList = new List<string>
        {
            "R10.14_R15.2.2b - Upgrade - Even",
            "R10.14_R15.2.2c - Upgrade - Odd",
            "R10.14_R15.2.2 - Upgrade - Prx"
        };

        originalList.Sort(new SubstringPriorityComparer());

        foreach (var item in originalList)
        {
            Console.WriteLine(item);
        }
    }
}

关键注意点

  • 使用StringComparison.OrdinalIgnoreCase进行不区分大小写的子串匹配,避免因大小写差异导致匹配失败。
  • 权重值越小优先级越高,确保排序顺序符合要求。
  • 空字符串或不包含任何目标子串的字符串默认排在最后,可根据需求调整权重规则。

内容的提问来源于stack exchange,提问作者Bogdan Kovačević

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 09:42:44