如何使用LINQ选择具有最高值的项目?
问题描述:
想象一下,你有这样的一类:如何使用LINQ选择具有最高值的项目?
class Foo {
string key;
int value;
}
你会如何选择与富从IEnumeralbe<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)。
答
这里的另一种选择:
list.OrderByDescending(l => l.value).First();
或
list.OrderBy(l => l.value).Last();
+0
这是我以前使用的,但我认为它不是O(n)。 – mafu 2010-06-09 08:40:40
+0
是的,不会的。 – 2010-06-09 08:44:28
现在很吸引人。 – mafu 2010-06-09 08:47:24
是的,morelinq很棒。 – tzaman 2010-06-09 08:47:58
或list.Where(w => w.value == list.Max(m => m.value)) – 2017-01-28 19:49:13