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

在C#中如何比较两个字符串并执行分割、去重合并及排序?

在C#中实现字符串分割、合并去重并排序的方案

嘿,这个需求很明确,咱们一步步来搞定它——先聊聊字符串比较的要点,再实现你要的SplitSortAndMerge方法。

一、先说说C#里的字符串比较

在处理重复项的时候,字符串比较的规则很重要:

  • 直接用==:字符串虽然是引用类型,但重载了==运算符,默认会做值比较,不过要注意大小写和文化差异。
  • 更灵活的方式是用string.Equals(strA, strB, StringComparison):可以指定比较规则,比如:
    • StringComparison.Ordinal:精确匹配(推荐用于ID、编码这类非语言字符串)
    • StringComparison.OrdinalIgnoreCase:忽略大小写匹配
    • StringComparison.CurrentCulture:基于当前系统文化的比较

你的示例里重复项是完全一致的123ABC,用默认规则就够了,如果需要忽略大小写,后面代码里可以调整。

二、实现SplitSortAndMerge扩展方法

你示例里的调用方式str1.SplitSortAndMerge(str2)很优雅,咱们用字符串扩展方法来实现它,这样所有字符串都能直接调用这个方法。

完整代码实现

using System.Linq;

// 扩展方法必须放在静态类里
public static class StringExtensions
{
    public static string SplitSortAndMerge(this string sourceStr, string targetStr, char separator = ';')
    {
        // 1. 分割两个字符串,同时移除空条目(避免空字符串干扰结果)
        var sourceParts = sourceStr.Split(new[] { separator }, StringSplitOptions.RemoveEmptyEntries);
        var targetParts = targetStr.Split(new[] { separator }, StringSplitOptions.RemoveEmptyEntries);

        // 2. 合并并去重:Union方法会自动剔除重复项,默认使用字符串的默认比较规则
        var uniqueCombinedParts = sourceParts.Union(targetParts);

        // 3. 排序:默认按字符串的Unicode顺序排序,刚好符合你示例的输出顺序
        var sortedParts = uniqueCombinedParts.OrderBy(part => part);

        // 4. 拼接成最终的字符串
        return string.Join(separator.ToString(), sortedParts);
    }
}

调用示例

var str1 = "123ABC;789XYZ";
var str2 = "456CDE;123ABC;012ABC";
var result = str1.SplitSortAndMerge(str2);
// 输出结果:"012ABC;123ABC;456CDE;789XYZ"

三、自定义规则的扩展

如果需要调整规则,比如忽略大小写去重/排序,只需要修改Union和OrderBy的参数:

// 忽略大小写的版本
public static string SplitSortAndMergeIgnoreCase(this string sourceStr, string targetStr, char separator = ';')
{
    var sourceParts = sourceStr.Split(new[] { separator }, StringSplitOptions.RemoveEmptyEntries);
    var targetParts = targetStr.Split(new[] { separator }, StringSplitOptions.RemoveEmptyEntries);

    // 用忽略大小写的比较器去重
    var uniqueCombinedParts = sourceParts.Union(targetParts, StringComparer.OrdinalIgnoreCase);
    // 忽略大小写排序
    var sortedParts = uniqueCombinedParts.OrderBy(part => part, StringComparer.OrdinalIgnoreCase);

    return string.Join(separator.ToString(), sortedParts);
}

内容的提问来源于stack exchange,提问作者Antoine Griffard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:56:11