当前位置:  开发笔记 > 编程语言 > 正文

按某种标准从集合中选择最大项目

如何解决《按某种标准从集合中选择最大项目》经验,为你挑选了1个好方法。

我是.net 3.5的新手.我有一个项目集合:

IList models;

哪里

class Model
{
    public string Name
    {
       get;
       private set;
    }
}

我想得到名称长度最长的元素.我试过了

string maxItem = models.Max(model => model.Name.Length);

但它当然会返回最大长度(我需要一个Model对象).我知道有一种方法可以使用扩展方法,但我不知道如何.



1> Jon Skeet..:

遗憾的是,没有内置的方法可以做到这一点 - 但是编写扩展方法很容易.

事实上,这是我的第一篇博客文章之一......请注意,其中一条评论中有更好的实施方式.如果我有时间,我会把它移到身体里.

编辑:好的,我有一个略有缩写的版本 - 它只返回最大元素,使用给定的选择器.也不需要进行投影 - 如果需要,可以在之后做一次.请注意,您可以删除约束TValue并使用Comparer.Default,或者具有允许将比较指定为另一个参数的重载.

public static TSource MaxBy(this IEnumerable source,
                                             Func selector)
    where TValue : IComparable
{
    TValue maxValue = default(TValue);
    TSource maxElement = default(TSource);
    bool gotAny = false;

    foreach (TSource sourceValue in source)
    {
        TValue value = selector(sourceValue);
        if (!gotAny || value.CompareTo(maxValue) > 0)
        {
            maxValue = value;
            maxElement = sourceValue;
            gotAny = true;
        }
    }
    if (!gotAny)
    {
        throw new InvalidOperationException("source is empty");
    }
    return maxElement;
}

样本使用:(注意类型推断):

string maxName = models.MaxBy(model => model.Name.Length).Name;

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有