Get Max value from List

后端 未结 8 412
猫巷女王i
猫巷女王i 2021-02-02 05:08

I have List List, my type contains Age and RandomID

Now I want to find the maximum age from this list.

What

相关标签:
8条回答
  • 2021-02-02 05:28

    Okay, so if you don't have LINQ, you could hard-code it:

    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;
    }
    

    Or you could write a more general version, reusable across lots of list types:

    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;
    }
    

    You can use this with:

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

    Or you could use LINQBridge :)

    In each case, you can return the if block with a simple call to Math.Max if you want. For example:

    foreach (T item in list)
    {
        maxValue = Math.Max(maxValue, projection(item));
    }
    
    0 讨论(0)
  • 2021-02-02 05:28
    thelist.Max(e => e.age);
    
    0 讨论(0)
  • 2021-02-02 05:29

    Assuming you have access to LINQ, and Age is an int (you may also try var maxAge - it is more likely to compile):

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

    If you also need the RandomID (or the whole object), a quick solution is to use MaxBy from MoreLinq

    MyType oldest = myTypes.MaxBy(t => t.Age);
    
    0 讨论(0)
  • 2021-02-02 05:30

    Simplest is actually just Age.Max(), you don't need any more code.

    0 讨论(0)
  • 2021-02-02 05:41
    int max = myList.Max(r => r.Age);
    

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

    0 讨论(0)
  • 2021-02-02 05:47

    Easiest way is to use System.Linq as previously described

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

    This is also possible with a Dictionary

    using System.Linq;
    
    public int GetHighestValue(Dictionary<MyTypes, OtherType> obj)
    {
        return obj.Count > 0 ? obj.Max(t => t.Key.Age) : 0; //could also return -1
    }
    
    0 讨论(0)
提交回复
热议问题