Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 选择最大年龄C_C#_List_Max - Fatal编程技术网

C# 选择最大年龄C

C# 选择最大年龄C,c#,list,max,C#,List,Max,我创建了一个列表,其中包含具有以下属性的对象集合:X、Y、Z 我想找出集合中哪个对象的Z最大 我试着使用Max函数,但我不明白它是如何使用的 int maxAge = myList.Max(obj => obj.Z); 使用的参数是lambda表达式。此表达式指示在本例中使用哪个属性Z来获取最大值。这将获得最大年龄。如果您想要具有最大年龄的对象,可以按年龄排序并获得第一个结果: MyType maxItem = myList.OrderByDescending(obj => obj

我创建了一个列表,其中包含具有以下属性的对象集合:X、Y、Z

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

我试着使用Max函数,但我不明白它是如何使用的

int maxAge = myList.Max(obj => obj.Z);
使用的参数是lambda表达式。此表达式指示在本例中使用哪个属性Z来获取最大值。这将获得最大年龄。如果您想要具有最大年龄的对象,可以按年龄排序并获得第一个结果:

MyType maxItem = myList.OrderByDescending(obj => obj.Z).First();

如果这样做,请注意,如果两个或两个以上的项目都具有最大年龄,则只会选择其中一个项目。

如果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);

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);
   }
}
If可以在类上按照以下方式实现IComparable或IComparable:

public Int32 CompareTo(MyClass other) {
  return Z.CompareTo(other.Z);
}
您只需调用即可获得最大值,这将需要使用System.Linq:


这将只对值列表执行一次传递。

获取最大值,但不会告诉您哪个对象具有该最大值,但这将返回X值,对吗???我想检索XNote值最高的对象,您需要使用System.Linq;在您的文件顶部。@csharptest.net:请重新恢复您的答案,如果列表很大,LINQ并不总是最佳答案。请注意,这会在列表上重复两次,并可能返回多个对象。这些属性可能与您自己的应用程序有关,也可能与您自己的应用程序无关。+1对于我的回答,尽管我不喜欢小写字母L,我知道它代表列表,但看起来非常像我最喜欢的数字之一。我同意这不一定是最快的,但它非常干净,除非列表非常大,否则它应该非常快。根据设计,它将返回多个匹配项。如果您只想要第一个,请将Where改为FirstOrDefault。我同意这是使用内置函数实现这一点的最干净的方法。这里有几个问题。首先,排序充其量是Onlogn,查找最大值和提取匹配元素都是Onlogn。第二,这只会给你第一场比赛。如果值是唯一的,或者您只关心获取任何匹配元素,那没关系,但是如果您需要所有匹配元素,您仍然需要找到最大值,然后提取匹配项。@sixlettervariables:是的,我知道它在某个地方,但它没有显示在“列表”文档中,所以我不得不挖掘一些…@tvanfosson:是的,但另一方面,您不必枚举整个集合两次。如果有多个项目可以具有最大值,则所有项目都位于结果的开头,因此它们很容易获得。@Guffa for n>4,2*nMyClass maxObject = list.Max();