IT Share you

목록에서 최대 값 가져 오기

shareyou 2021. 1. 9. 10:51
반응형

목록에서 최대 값 가져 오기


나는 목록을 가지고 List<MyType>, 내 타입이 포함 Age하고RandomID

이제이 목록에서 최대 연령을 찾고 싶습니다.

가장 간단하고 효율적인 방법은 무엇입니까?


좋습니다. 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 = FindMaxValue(list, delegate(MyType x) { return x.Age; });

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

또는 LINQBridge를 사용할 수 있습니다 . :)

각 경우에 Math.Max원하는 경우 간단한 호출로 if 블록을 반환 할 수 있습니다 . 예를 들면 :

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

가정 당신은 LINQ에 액세스 할 수 있고, Age이다 int(당신은 또한 시도 할 수 있습니다 var maxAge- 그것은 컴파일에 가능성이 높습니다)

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

RandomID(또는 전체 개체) 도 필요한 경우 빠른 해결책은 MoreLinq 에서 사용 MaxBy하는 것입니다.

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

int max = myList.Max(r => r.Age);

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


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

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

How about this way:

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

You basically let the Sort() method to do the job for you instead of writing your own method. Unless you don't want to sort your collection.


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
}

ReferenceURL : https://stackoverflow.com/questions/3464934/get-max-value-from-listmytype

반응형