Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.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#_Linq_List_Max - Fatal编程技术网

C# 在列表中查找两个(或更多)属性的最大值

C# 在列表中查找两个(或更多)属性的最大值,c#,linq,list,max,C#,Linq,List,Max,这个问题是以这样或那样的方式提出的,但不是这样。我刚刚遇到了一个非常基本的问题,我正在寻找一个统计解决方案:-) 我得到了一个具有两个整数属性的对象列表。现在我想找到列表中所有对象的两个属性的最大值。 我提出了三个解决方案: 第一种方法: int max = Math.Max(list.Max(elem => elem.Nr), list.Max(elem => elem.OtherNr)); public int Max(List<Thing> list) { i

这个问题是以这样或那样的方式提出的,但不是这样。我刚刚遇到了一个非常基本的问题,我正在寻找一个统计解决方案:-) 我得到了一个具有两个整数属性的对象列表。现在我想找到列表中所有对象的两个属性的最大值。
我提出了三个解决方案:

第一种方法:

int max = Math.Max(list.Max(elem => elem.Nr), list.Max(elem => elem.OtherNr));
public int Max(List<Thing> list)
{
  int maxNr = 0;

  foreach (var elem in list)
  {
    if (elem.Nr > maxNr)
      maxNr = elem.Nr;
    if (elem.OtherNr > maxNr)
      maxNr = elem.OtherNr;
  }

  return maxNr;
}
第二种方法:

int max = Math.Max(list.Max(elem => elem.Nr), list.Max(elem => elem.OtherNr));
public int Max(List<Thing> list)
{
  int maxNr = 0;

  foreach (var elem in list)
  {
    if (elem.Nr > maxNr)
      maxNr = elem.Nr;
    if (elem.OtherNr > maxNr)
      maxNr = elem.OtherNr;
  }

  return maxNr;
}
public int Max(列表)
{
int maxNr=0;
foreach(列表中的变量元素)
{
如果(元素编号>最大编号)
maxNr=元素Nr;
如果(elem.OtherNr>maxNr)
maxNr=元素其他nr;
}
返回maxNr;
}
第三种方法是按这两个属性进行排序,然后只取第一个条目并获取一个或另一个属性

我想找到最快的方法来做到这一点。因此,在所有方法中,我喜欢第二种方法,即post(从性能角度来看)。即使第一个较短,你也必须浏览两次列表

还有其他解决方案吗?

如果有

int max = list.Max(elem => Math.Max(elem.Nr, elem.OtherNr));
它仍然是一个单行程序,但只在列表中迭代一次。我认为单行文字比手工书写可能会稍微降低效率要好


(另外,您不需要从
double
转换到
int
吗?

如果您需要两个以上的属性(这是
Math.Max
的限制),则使用LINQ的替代解决方案:


是不是太慢了?实际上,就可读性和效率而言,第一个看起来不错。我想如果没有结构上的改变,你不会更快。不,不是的,我只是想知道最快的算法是什么。我喜欢这个解决方案,它甚至更好,而且几乎和“手写”的解决方案一样