我创建了一个list<T>
,其中包含具有此属性的对象集合:X
,Y
,Z
我想找出集合中哪个对象具有最大的Z
我尝试使用Max()
功能,但我不明白它是如何使用的......
答案 0 :(得分:31)
Max用于查找属性的最大值。获得最大值后,可以使用Where子句选择值匹配的对象。
var maxZ = list.Max( obj => obj.Z );
var maxObj = list.Where( obj => obj.Z == maxZ );
答案 1 :(得分:17)
要获取具有最大Z值的对象,请按降序对Z值进行排序并获取第一项:
TypeOfObject oldest = list.OrderByDescending(x => x.Z).First();
编辑:
将其更改为使用IEnumerable.OrderByDescending方法而不是List.Sort。
编辑2:
如果您想要性能,这比最快的LINQ解决方案快四倍:
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);
}
}
答案 2 :(得分:7)
int maxAge = myList.Max(obj => obj.Z);
使用的参数是lambda表达式。此表达式指示要使用哪个属性(在本例中为Z)以获取最大值。这将获得最大年龄。如果你想要年龄最大的对象,你可以按年龄排序并得到第一个结果:
MyType maxItem = myList.OrderByDescending(obj => obj.Z).First();
如果你这样做,请注意,如果两个或多个项目都具有最大年龄,则只选择其中一个。
答案 3 :(得分:1)
如果可以按照以下几行在您的课程上实施IComparable<T>
或IComparable
:
public Int32 CompareTo(MyClass other) {
return Z.CompareTo(other.Z);
}
您可以通过调用(这将需要using System.Linq
)来获得最大值:
MyClass maxObject = list.Max();
这只会对您的值列表执行一次传递。
答案 4 :(得分:0)
如果它具有可比性,它将在很大程度上取决于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);