문제

나는 a list<T> 여기에는이 속성이있는 개체 모음이 포함되어 있습니다. X, Y, Z

컬렉션의 어떤 개체가 가장 큰지 알고 싶습니다. Z

나는 그것을 사용하려고했다 Max() 기능하지만 어떻게 사용되는지 이해하지 못합니다 ...

도움이 되었습니까?

해결책

Max는 속성의 최대 값을 찾는 데 사용됩니다. 최대 값이 있으면 where 절을 사용하여 값이 일치하는 객체를 선택할 수 있습니다.

var maxZ = list.Max( obj => obj.Z );
var maxObj = list.Where( obj => obj.Z == maxZ );

다른 팁

가장 큰 z 값을 가진 객체를 얻으려면 z 값을 내림차순으로 정렬하고 첫 번째 항목을 얻습니다.

TypeOfObject oldest = list.OrderByDescending(x => x.Z).First();

편집하다:
ienumerable.sordsording 대신에 ienumerable.sordecending 메서드를 사용하도록 변경했습니다.

편집 2 :
성능을 원한다면 가장 빠른 LINQ 솔루션보다 약 4 배 빠릅니다.

int high = Int32.MinValue;
List<TypeOfObject> highest = new List<TypeOfObject>();
foreach (TypeOfObject v in list) {
   if (v.Z >= high) {
      if (v.Z > high) highest.Clear();
      high = v.Z;
      highest.Add(v);
   }
}
int maxAge = myList.Max(obj => obj.Z);

사용 된 매개 변수는 람다 식입니다. 이 표현식은 최대 값을 얻기 위해 사용 할 속성 (이 경우 z)을 나타냅니다. 이것은 최대 연령을 얻게됩니다. 나이가 가장 큰 물건을 원한다면 나이별로 분류하고 첫 번째 결과를 얻을 수 있습니다.

MyType maxItem = myList.OrderByDescending(obj => obj.Z).First();

이런 식으로 그렇게하면 두 개 이상의 품목이 모두 최대 연령을 갖는 경우 그 중 하나만 선택됩니다.

도 구현할 수있는 경우 IComparable<T> 또는 IComparable 이 줄을 따라 수업에서 :

public Int32 CompareTo(MyClass other) {
  return Z.CompareTo(other.Z);
}

전화를 통해 단순히 최대 값을 얻을 수 있습니다 (이것은 필요합니다. using System.Linq):

MyClass maxObject = list.Max();

이것은 값 목록에 대한 단일 패스 만 수행합니다.

비슷한 경우 X 유형에 크게 의존합니다.

var array = new[] { 
    new { X = "a", Y = "a", Z = 1 }, 
    new { X = "b", Y = "b", Z = 2 } 
};
var max = array.Max(x => x.Z);
Console.WriteLine(max);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top