【问题标题】:How do I select the item with the highest value using LINQ?如何使用 LINQ 选择具有最高值的项目?
【发布时间】:2010-06-09 08:37:19
【问题描述】:

想象一下你有这样一门课:

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 =&gt; l.value).First(); 是我的首选,但不是 O(n)。

【问题讨论】:

    标签: c# linq


    【解决方案1】:

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

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

    【讨论】:

    • 或者,list.Where(w => w.value == list.Max(m => m.value))
    【解决方案2】:

    这是另一个选择:

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

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

    【讨论】:

    • 这是我之前用的,但我觉得不是O(n)。
    【解决方案3】:
    Foo foo = list.Max();
    

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

    【讨论】:

    • 好主意,但我无法更改 Foo。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 2010-10-29
    • 1970-01-01
    • 2015-05-03
    • 2017-01-02
    相关资源
    最近更新 更多