这个问题已经在SO上以一种或另一种方式提出,但不是这样的.我刚刚找到了一个非常基本的问题,我正在寻找一个令人满意的解决方案:-)我得到了一个具有两个整数属性的对象列表.现在我想找到列表中所有对象的两个属性的最大值.
我想出了三个解决方案:
第一种方法:
int max = Math.Max(list.Max(elem => elem.Nr), list.Max(elem => elem.OtherNr));
Run Code Online (Sandbox Code Playgroud)
第二种方法:
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;
}
Run Code Online (Sandbox Code Playgroud)
第三种方法是通过两个属性进行排序,然后只取第一个条目并获得一个或另一个属性.
我想找到最快的方法来做到这一点.因此,在所有方法中,我喜欢第二个帖子(从性能的角度来看).即使第一个较短,您也必须两次查看列表.
还有其他方法吗?
Joh*_*dal 10
如果您需要超过2个属性(这是限制Math.Max),则使用LINQ的替代解决方案:
int max = list
.SelectMany(elem => new[]{ elem.Prop1, elem.Prop2, elem.Prop3 })
.Max();
Run Code Online (Sandbox Code Playgroud)
如果你这样做
int max = list.Max(elem => Math.Max(elem.Nr, elem.OtherNr));
Run Code Online (Sandbox Code Playgroud)
它仍然是一个单行,但只在列表中迭代一次.对于手工编写可能会略微降低效率的问题,我会采取单一的措辞.
(另外,你不需要从double那里的int某个地方演员吗?)