문제
나는 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);