我有一个具有两个 int 属性的对象列表。该列表是另一个 linq 查询的输出。物体:
public class DimensionPair
{
public int Height { get; set; }
public int Width { get; set; }
}
我想找到并返回列表中最大的对象Height
适当的价值。
我可以设法获得最高的价值Height
值而不是对象本身。
我可以用 Linq 做到这一点吗?如何?
我们有一个扩展方法 https://github.com/morelinq/MoreLINQ/blob/master/MoreLinq/MaxBy.cs正是这样做的MoreLINQ https://github.com/morelinq/MoreLINQ。您可以查看那里的实现,但基本上这是一个迭代数据的情况,记住到目前为止我们看到的最大元素以及它在投影下产生的最大值。
在你的情况下,你会做类似的事情:
var item = items.MaxBy(x => x.Height);
这比 Mehrdad 的第二个解决方案(基本上与MaxBy
):
- 它的 O(n) 与之前接受的答案 https://stackoverflow.com/a/1101848/16587它在每次迭代中找到最大值(使其 O(n^2))
- 排序解决方案是 O(n log n)
- 采取
Max
value,然后找到具有该值的第一个元素的时间复杂度为 O(n),但会迭代序列两次。如果可能,您应该以单遍方式使用 LINQ。
- 它比聚合版本更容易阅读和理解,并且每个元素仅评估一次投影
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)