从List <mytype> </mytype>获取最大值

时间:2010-08-12 05:18:50

标签: list c#-2.0

我有列表List<MyType>,我的类型包含AgeRandomID

现在我想从此列表中找到最大年龄。

最简单,最有效的方法是什么?

8 个答案:

答案 0 :(得分:78)

假设您有权访问LINQ,Ageint(您也可以尝试var maxAge - 它更有可能编译):

int maxAge = myTypes.Max(t => t.Age);

如果您还需要RandomID(或整个对象),快速解决方案是使用MaxBy中的MoreLinq

MyType oldest = myTypes.MaxBy(t => t.Age);

答案 1 :(得分:31)

好的,所以如果你没有LINQ,你可以硬编码:

public int FindMaxAge(List<MyType> list)
{
    if (list.Count == 0)
    {
        throw new InvalidOperationException("Empty list");
    }
    int maxAge = int.MinValue;
    foreach (MyType type in list)
    {
        if (type.Age > maxAge)
        {
            maxAge = type.Age;
        }
    }
    return maxAge;
}

或者您可以编写更通用的版本,可以在许多列表类型中重复使用:

public int FindMaxValue<T>(List<T> list, Converter<T, int> projection)
{
    if (list.Count == 0)
    {
        throw new InvalidOperationException("Empty list");
    }
    int maxValue = int.MinValue;
    foreach (T item in list)
    {
        int value = projection(item);
        if (value > maxValue)
        {
            maxValue = value;
        }
    }
    return maxValue;
}

您可以将其用于:

// C# 2
int maxAge = FindMax(list, delegate(MyType x) { return x.Age; });

// C# 3
int maxAge = FindMax(list, x => x.Age);

或者您可以使用LINQBridge:)

在每种情况下,如果需要,您可以通过简单调用Math.Max来返回if块。例如:

foreach (T item in list)
{
    maxValue = Math.Max(maxValue, projection(item));
}

答案 2 :(得分:30)

答案 3 :(得分:8)

thelist.Max(e => e.age);

答案 4 :(得分:1)

这样怎么样:

List<int> myList = new List<int>(){1, 2, 3, 4}; //or any other type
myList.Sort();
int greatestValue = myList[ myList.Count - 1 ];

您基本上让Sort()方法为您完成工作,而不是编写自己的方法。除非你不想对你的收藏品进行排序。

答案 5 :(得分:1)

var maxAge = list.Max(x => x.Age);

答案 6 :(得分:0)

最简单的方法是使用如前所述的System.Linq

MSZoning
    1
    2
    1
    1
    2
    2
    3      

这也可以用字典

using System.Linq;

public int GetHighestValue(List<MyTypes> list)
{
    return list.Count > 0 ? list.Max(t => t.Age) : 0; //could also return -1
}

答案 7 :(得分:0)

最简单的实际上只是Age.Max(),您不再需要任何代码。