【发布时间】:2014-07-16 15:48:52
【问题描述】:
我需要一种简单、轻量级的方法来获取双精度数组的 max 和 min 值。诀窍是我只需要数组中两个索引之间的最大值和最小值。
内置的 arrayOfDoubles.Max() 和 arrayOfDoubles.Min() 将不工作,因为它们会检查整个数组。
此代码将不断运行,并且需要有一定的效率。也就是说,简单性和可读性比速度本身更重要。
这是获取两个索引之间的最大值和最小值的一种方法:
double[] array = new double[8] { 3, 1, 15, 5, 11, 9, 13, 7 };
int startIndex = 3;
int endIndex = 6;
// Get max and min between these two indexes in the array
double max = GetMax(array, startIndex, endIndex);
double min = GetMin(array, startIndex, endIndex);
Console.WriteLine("Max = " + max + ", Min = " + min);
这是 GetMax 的代码,GetMin 非常相似:
private static double GetMax(double[] array, int startIndex, int endIndex)
{
double max = double.MinValue;
for (int i = startIndex; i <= endIndex; i++)
{
// Increase max with each bigger value
max = Math.Max(max, array[i]);
}
return max;
}
输出:Max = 13, Min = 5
问题:我可以通过哪些其他方式获得相同的结果,并且可能更简单且不需要太多开销?
【问题讨论】:
-
真的没有比这更简单的了。
-
唯一的可能是在同一个循环中同时做最小值和最大值。您可以手动内联 Math.Min 和 Math.Max 调用,但无论如何这些调用可能会自动内联。
-
数组内容多久改变一次?每次迭代之间是否所有元素都发生了变化,还是只有一些元素会发生变化?我的意思是,可能有更好的结构来存储您的数据..
-
顺便问一下,我们在这里讨论的数组有多大?