我们有一个扩展方法可以在MoreLINQ中做到这一点。您可以在此处查看实现,但是基本上是在数据中进行迭代的情况,记住我们到目前为止所看到的最大元素以及在投影下产生的最大值。
在您的情况下,您可以执行以下操作:
var item = items.MaxBy(x => x.Height);
与Mehrdad的第二种解决方案(与基本上相同)相比,此方法(IMO)比此处介绍的任何解决方案都要好
MaxBy:
- 它是O(n),不同于先前接受的答案,后者在每次迭代中都找到最大值(使其成为O(n ^ 2))
- 排序解为O(n log n)
- 取
Max
的值,然后找出与该值的第一个元素是O(n),但在序列迭代两次。在可能的情况下,应以单遍方式使用LINQ。 - 与汇总版本相比,它的阅读和理解要简单得多,并且每个元素仅评估一次投影


![如何对集合中所有对象的属性执行.Max()并返回具有最大值的对象[重复] 如何对集合中所有对象的属性执行.Max()并返回具有最大值的对象[重复]](http://www.mshxw.com/aiimages/31/442836.png)
