小编典典

如何对集合中所有对象的属性执行.Max()并返回具有最大值的对象

all

我有一个具有两个 int 属性的对象列表。该列表是另一个 linq 查询的输出。物体:

public class DimensionPair  
{
    public int Height { get; set; }
    public int Width { get; set; }
}

我想在列表中查找并返回具有最大Height属性值的对象。

我可以设法获得价值的最高值,Height但不能获得对象本身。

我可以用 Linq 做到这一点吗?如何?


阅读 67

收藏
2022-04-12

共1个答案

小编典典

我们在MoreLINQ中有一个扩展方法可以做到这一点。您可以查看那里的实现,但基本上这是一个遍历数据的情况,记住我们迄今为止看到的最大元素以及它在投影下产生的最大值。

在您的情况下,您会执行以下操作:

var item = items.MaxBy(x => x.Height);

这比 Mehrdad 的第二个解决方案(与 基本相同)之外的任何解决方案都更好(IMO MaxBy):

  • 它是 O(n) 与之前接受的答案不同,它在每次迭代中找到最大值(使其成为 O(n^2))
  • 排序解决方案是 O(n log n)
  • 取值Max,然后找到具有该值的第一个元素是 O(n),但迭代序列两次。在可能的情况下,您应该以单遍方式使用 LINQ。
  • 它比聚合版本更易于阅读和理解,并且每个元素只评估一次投影
2022-04-12