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

C#使用LINQ检查列表中是否存在属性值相同的对象

实现方案

完全可以用LINQ优化你的原有代码,相比O(n²)时间复杂度的嵌套循环,LINQ方案的时间复杂度可降低至O(n),执行效率更高,代码可读性也更好。
你可以根据需求选择以下两种常用实现:

1. 简洁分组写法

通过GroupBy按Elevation属性分组,直接判断是否存在元素数≥2的分组即可:

bool hasDuplicateElevation = listOflevels
    .GroupBy(level => level.Elevation)
    .Any(group => group.Count() >= 2);

如果需要严格对齐你原有逻辑中Name不同才判定为重复的规则,可以调整为:

bool hasDuplicateElevation = listOflevels
    .GroupBy(level => level.Elevation)
    .Any(group => group.Select(l => l.Name).Distinct().Count() >= 2);

2. 更高性能的HashSet写法

如果列表数据量较大,推荐使用HashSet实现,遍历过程中遇到第一个重复值就会直接返回结果,无需遍历全量数据,性能最优:

var elevationSet = new HashSet<double>();
bool hasDuplicateElevation = listOflevels.Any(level => !elevationSet.Add(level.Elevation));

注意:double为浮点数类型,直接比较相等可能存在精度误差,如果Elevation是计算生成的数值,建议先做精度对齐(比如通过Math.Round(level.Elevation, 保留小数位数)处理)再进行重复判断,避免业务误判。

原有代码问题说明

你当前的嵌套循环写法存在两个可优化点:

  • 时间复杂度为O(n²),列表元素越多性能下降越明显
  • 同一对重复对象会被重复判断两次,存在无效计算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:45:03