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

maf*_*afu 1 c# linq

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

class Foo {
    string key;
    int value;
}
Run Code Online (Sandbox Code Playgroud)

你如何选择具有最高价值的Foo IEnumeralbe<Foo>

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

IEnumerable<Foo> list;
Foo max = list.Aggregate ((l, r) => l.value > r.value ? l : r);
Run Code Online (Sandbox Code Playgroud)

你能想到一个更好的方法吗?

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

tza*_*man 7

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

Foo max = list.MaxBy(f => f.value);
Run Code Online (Sandbox Code Playgroud)