C#使用LINQ查找List集合中指定属性值唯一的元素
C# 列表按指定属性查找唯一元素实现方案
核心思路
要筛选出name属性在整个列表中仅出现一次的元素,最高效简洁的方案是借助LINQ的分组能力:先按目标属性分组,再筛选出元素数量为1的分组,最后提取分组内的元素即可。
实现代码
首先确保你已经引入了LINQ命名空间:
using System.Linq;
核心查询逻辑如下:
var uniqueItems = list .GroupBy(item => item.name) .Where(g => g.Count() == 1) .SelectMany(g => g) .ToList();
逻辑说明
GroupBy(item => item.name):将列表中所有元素按name属性值分组,相同name的元素会被归到同一个分组中Where(g => g.Count() == 1):过滤掉分组内元素数量大于1的分组,只保留name值唯一的分组SelectMany(g => g):将符合条件的分组内的元素展平为普通元素集合- 对你提供的测试样例,上述代码执行后
uniqueItems集合中只会包含{ id = 3, name = "test1" },完全匹配预期结果
方案优势
- 时间复杂度为O(n),仅需两次列表遍历即可完成计算,远优于嵌套循环查重的O(n²)方案,在大数量级列表下性能优势明显
- 代码可读性强,逻辑清晰,后续如果需要更换判断唯一性的属性(比如改成按
id判断),只需要修改GroupBy里的属性选择器即可,维护成本低
内容的提问来源于stack exchange,提问作者hilla01
相关产品推荐
相关产品推荐

