我对如何最好地实现一个采用整数数组的简单方法并返回最高整数(使用C#2.0)的人有不同意见.
以下是两个实现 - 我有自己的看法哪个更好,为什么,但我会感谢任何公正的意见.
选项A.
public int GetLargestValue(int[] values)
{
try {
Array.Sort(values);
return values[values.Length - 1];
}
catch (Exception){ return -1;}
}
Run Code Online (Sandbox Code Playgroud)
选项B.
public int GetLargestValue(int[] values)
{
if(values == null)
return -1;
if(values.Length < 1)
return -1;
int highestValue = values[0];
foreach(int value in values)
if(value > highestValue)
highestValue = value;
return highestValue;
}
Run Code Online (Sandbox Code Playgroud)
Fra*_*ois 15
当然是B.
A很难看:
Catch(Exception)是一个非常糟糕的做法
你不应该依赖null ref的异常,超出范围,......
排序比迭代更复杂
复杂性:
在最坏的情况下,A将是O(n log(n))并且甚至是O(n 2)
B最坏的情况是O(n)
Jac*_*esB 11
A有副作用,它对数组进行排序.调用者可能会意外.
编辑:我不想为空或空数组返回-1(在两个解决方案中),因为-1可能是数组中的合法值.这应该真的产生一个异常(也许ArgumentException
).
小智 5
我更喜欢选项B,因为它只遍历集合一次.
在选项A中,您可能不得不多次访问许多元素(次数取决于排序算法的实现).
该选项A是inefficent实现,但导致了相当明确的算法.然而它确实使用了一个相当丑陋的异常捕获,只有在传入一个空数组时才会触发(因此可能会通过预排序检查更清晰地写出来).
PS,你永远不应该只是捕捉"异常",然后纠正的事情.有许多类型的例外,通常你应该抓住每个可能的例外并相应地处理.
归档时间: |
|
查看次数: |
306 次 |
最近记录: |