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
相关产品推荐
相关产品推荐

