C# .NET 如何判断List<double>列表内所有元素是否近似相等
实现逻辑
判断列表内所有元素的最大差值是否不超过允许阈值,最简单高效的方式是直接计算列表的最大值和最小值,只要两者的差值小于等于2,就说明所有元素的差值都在可接受范围内,该方法时间复杂度仅为O(n),适合任意长度的列表。
完整实现代码
需要先处理空列表、单元素列表这类天然满足校验要求的边界场景:
using System.Linq; // 引入Linq命名空间,可直接调用Max/Min方法 var odds = new System.Collections.Generic.List<double>(); // 此处为向列表中添加数值的代码 const double AllowedMaxDiff = 2.0; bool isApproximatelyEqual = true; // 仅当元素数大于1时需要校验 if (odds.Count > 1) { double maxValue = odds.Max(); double minValue = odds.Min(); isApproximatelyEqual = (maxValue - minValue) <= AllowedMaxDiff; } // 测试校验结果 if (isApproximatelyEqual) { System.Console.WriteLine("所有元素满足近似相等要求"); } else { System.Console.WriteLine("存在元素差值超出允许范围"); }
可选优化
- 如果你不想引入Linq命名空间,也可以通过一次遍历手动计算最大最小值,逻辑完全一致:
bool isApproximatelyEqual = true; if (odds.Count > 1) { double max = odds[0]; double min = odds[0]; foreach (var odd in odds) { if (odd > max) max = odd; if (odd < min) min = odd; } isApproximatelyEqual = (max - min) <= 2.0; }
- double类型存在浮点精度误差,如果后续需要更小的差值校验阈值,可以给判断条件加极小的容差,比如
(max - min) <= 2.0 + 1e-9避免精度问题导致的误判,你当前允许差值为2的场景无需额外处理。
内容的提问来源于stack exchange,提问作者bbfl
相关产品推荐
相关产品推荐

