我创建了一个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.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);
}
}
int maxAge = myList.Max(obj => obj.Z);
使用的参数是一个 lambda 表达式。此表达式指示使用哪个属性(在本例中为 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);