从List <myType>获取最大值

Wah*_*eed 56 list c#-2.0

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

现在我想从这个列表中找到最大年龄.

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

Kob*_*obi 89

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

int maxAge = myTypes.Max(t => t.Age);
Run Code Online (Sandbox Code Playgroud)

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

MyType oldest = myTypes.MaxBy(t => t.Age);
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 36

好的,所以如果你没有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;
}
Run Code Online (Sandbox Code Playgroud)

或者你可以写一个更通用的版本,可以在许多列表类型中重用:

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;
}
Run Code Online (Sandbox Code Playgroud)

你可以使用它:

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

// C# 3
int maxAge = FindMaxValue(list, x => x.Age);
Run Code Online (Sandbox Code Playgroud)

或者你可以使用LINQBridge :)

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

foreach (T item in list)
{
    maxValue = Math.Max(maxValue, projection(item));
}
Run Code Online (Sandbox Code Playgroud)


ani*_*key 32

int max = myList.Max(r => r.Age);
Run Code Online (Sandbox Code Playgroud)

http://msdn.microsoft.com/en-us/library/system.linq.enumerable.max.aspx

  • 说明显而易见但是......为了在.net 4.0和VS2010中使用它,你需要"使用System.Linq;".右键单击错误不会显示"Resolve"选项. (2认同)

小智 5

var maxAge = list.Max(x => x.Age);
Run Code Online (Sandbox Code Playgroud)