选择最大年龄C#

时间:2009-09-28 20:11:42

标签: c# list max

我创建了一个list<T>,其中包含具有此属性的对象集合:XYZ

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

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

5 个答案:

答案 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);