选择最大年龄C#

Kil*_*ode 16 c# list max

我创建了一个list<T>包含有这个属性的对象的集合:X,Y,Z

我想找出集合中哪个对象最大 Z

我试图使用该Max()功能,但我不明白它是如何使用的...

tva*_*son 32

Max用于查找属性的最大值.获得最大值后,可以使用Where子句选择值匹配的对象.

var maxZ = list.Max( obj => obj.Z );
var maxObj = list.Where( obj => obj.Z == maxZ );
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这会对列表进行两次传递,并且可能会返回多个对象.这些属性可能是也可能不是您自己的应用程序的关注点. (3认同)
  • 我同意这不一定是最快的,但它非常干净,除非列表非常大,否则它应该非常快.它将 - 按设计 - 返回多个匹配.如果您只想要第一个,请将Where()更改为FirstOrDefault(). (3认同)

Guf*_*ffa 19

要获得具有最大Z值的对象,您可以按降序对Z值进行排序并获取第一个项目:

TypeOfObject oldest = list.OrderByDescending(x => x.Z).First();
Run Code Online (Sandbox Code Playgroud)

编辑:
更改它以使用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);
   }
}
Run Code Online (Sandbox Code Playgroud)


Met*_*ght 7

int maxAge = myList.Max(obj => obj.Z);
Run Code Online (Sandbox Code Playgroud)

使用的参数是lambda表达式.此表达式指示要使用哪个属性(在本例中为Z)以获取最大值.这将获得最大年龄.如果你想要年龄最大的对象,你可以按年龄排序并得到第一个结果:

MyType maxItem = myList.OrderByDescending(obj => obj.Z).First();
Run Code Online (Sandbox Code Playgroud)

如果您这样做,请注意,如果两个或多个项目都具有最大年龄,则只选择其中一个.