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

C# 如何去除字符串列表中正反顺序的重复项

实现方案

核心思路是为每个列表项生成与顺序无关的标准化唯一键,按键分组后保留第一个出现的原始项即可完成去重。

代码实现(.NET 6+ 推荐)

直接使用LINQ提供的DistinctBy方法,自定义键生成逻辑:

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

try
{
    string mondantory_docs = Batch.Properties.Get("MissingDocCheck");
    List<string> rawList = mondantory_docs.Split(',').ToList();
    
    // 自定义去重逻辑
    List<string> result = rawList.DistinctBy(item => 
    {
        // 没有分隔符的项直接用自身作为键
        if (!item.Contains("---")) return item;
        // 有分隔符的项拆分后排序,生成与顺序无关的键
        var parts = item.Split("---", StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
        Array.Sort(parts);
        return string.Join("---", parts);
    }).ToList();

    // 如果需要重新拼接为逗号分隔的字符串可启用下方代码
    // string finalStr = string.Join(",", result);
}
catch
{
    // 可根据业务需要补充异常处理逻辑
}

兼容低版本.NET实现

如果使用的.NET版本低于6,没有DistinctBy方法,可以用GroupBy替代:

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

try
{
    string mondantory_docs = Batch.Properties.Get("MissingDocCheck");
    List<string> rawList = mondantory_docs.Split(',').ToList();
    
    List<string> result = rawList.GroupBy(item => 
    {
        if (!item.Contains("---")) return item;
        var parts = item.Split("---", StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
        Array.Sort(parts);
        return string.Join("---", parts);
    }).Select(g => g.First()).ToList();
}
catch
{
}

逻辑说明

  • 对于不含---的普通项,直接保留不会被去重
  • 对于含---的项,拆分后对两个部分按默认字符顺序排序,无论原始顺序如何,只要组成的两个部分一致,就会生成相同的键
  • 分组后取第一个出现的原始项,符合保留其中一项的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:18:03