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

时间:2012-12-11 08:11:09

标签: c# linq list max

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

第一种方法:

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;
}

第三种方法是通过两个属性进行排序,然后只取第一个条目并获得一个或另一个属性。

我想找到最快的方法。因此,在所有方法中,我喜欢第二个帖子(从性能的角度来看)。即使第一个较短,你也必须经过两次清单。

还有其他解决方案吗?

2 个答案:

答案 0 :(得分:10)

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

int max = list
  .SelectMany(elem => new[]{ elem.Prop1, elem.Prop2, elem.Prop3 })
  .Max();

答案 1 :(得分:9)

如果你这样做

int max = list.Max(elem => Math.Max(elem.Nr, elem.OtherNr));

它仍然是单行,但只能在列表中迭代一次。对于手工写出来可能会略微降低效率,我会采取单一行为。

(另外,你不需要在那里的doubleint进行演员表吗?)