如何使用LINQ选择具有最高值的项目?

时间:2010-06-09 08:37:20

标签: c# linq

想象一下,你有一个这样的课:

class Foo {
    string key;
    int value;
}

如何从IEnumeralbe<Foo>

中选择具有最高值的Foo

一个基本问题是保持较低的迭代次数(即1),但这会影响可读性。毕竟,我能找到的最好的东西就是这样:

IEnumerable<Foo> list;
Foo max = list.Aggregate ((l, r) => l.value > r.value ? l : r);

你能想到更好的方法吗?

编辑:list.OrderByDescending(l => l.value).First();是我的首选,但不是O(n)。

3 个答案:

答案 0 :(得分:7)

您可以从Jon Skeet的MaxBy项目中获取MoreLinq LINQ扩展方法。那就是:

Foo max = list.MaxBy(f => f.value);

答案 1 :(得分:2)

这是另一种选择:

list.OrderByDescending(l => l.value).First();

list.OrderBy(l => l.value).Last();

答案 2 :(得分:1)

Foo foo = list.Max();

但是你必须为Foo类型实现IComparable接口;