如何从存储Point对象的HashSet中获取z字段值最大的元素
解决方案
这里提供两种可直接使用的实现方式,分别是基于Linq的极简方案和不依赖任何第三方库的原生遍历方案:
方案1:使用Linq实现
如果你可以使用Linq,在.NET Core 3.0、.NET 5及更高版本中可以直接调用内置的MaxBy扩展方法:
using System.Linq; // 直接获取z字段值最大的Point元素 Point maxZPoint = H.MaxBy(p => p.z);
注意:如果HashSet是空集合,
MaxBy会返回null,调用前建议先判断H.Any()避免空引用异常。
如果是低版本.NET Framework不支持MaxBy,可以用Linq的排序方法组合实现:
Point maxZPoint = H.OrderByDescending(p => p.z).FirstOrDefault();
方案2:不使用Linq的原生实现
如果不想依赖Linq,直接遍历HashSet逐个比较即可:
Point maxZPoint = null; foreach (var point in H) { if (maxZPoint == null || point.z > maxZPoint.z) { maxZPoint = point; } }
这种方式时间复杂度为O(n),比排序方案的O(nlogn)效率更高,更适合数据量较大的场景。
补充说明:如果存在多个z值相同且为最大值的元素,以上两种方法都会返回遍历过程中第一个遇到的最大z值元素。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

