如何用C# LINQ查找并移除List重复项(按指定规则保留)
使用C# LINQ实现配置文件列表的去重筛选
原始集合:
var mylist = new List<string>(){"itemA.config","itemA.en-us.config","itemB.config","itemC.config", "itemC.en-us.config","itemC.fa-ir.config"};
筛选规则
- 按文件核心前缀分组(例如
itemA、itemB、itemC为同一组) - 每组优先保留带
fa-ir后缀的配置项 - 若组内无
fa-ir项,则保留不带区域后缀的基础配置项(即*.config格式)
LINQ实现代码
var result = mylist .GroupBy(item => // 提取核心前缀:两次移除后缀,得到不带区域和.config的基础名称 Path.GetFileNameWithoutExtension(Path.GetFileNameWithoutExtension(item)) ) .Select(group => // 优先筛选fa-ir项,无匹配则选基础config项 group.FirstOrDefault(x => x.EndsWith(".fa-ir.config")) ?? group.First(x => x.Split('.').Length == 2) ) .ToList();
逻辑说明
- 分组逻辑:通过两次调用
Path.GetFileNameWithoutExtension,剥离文件名的区域后缀和.config后缀,提取出核心前缀作为分组依据,确保同前缀的文件被归为一组。 - 组内筛选:对每个分组,先尝试匹配
.fa-ir.config结尾的项;如果没有找到,就选择仅包含一个.的文件(即xxx.config格式的基础项),适配通用场景下的区域后缀判断。
内容的提问来源于stack exchange,提问作者Mahmood Nouraei
相关产品推荐
相关产品推荐

