我需要从不同的变量中获取最小值和最大值。我得到变量值xMin,yMin,xMax和yMax,我需要找到最小xMin值,最小yMin值,最大xMax值和yMax值的最大值。
我编写的代码有效:
double xmin , ymin , xmax , ymax = 0;
double[][] arrayMinMax = new double[4][];
for (int m = 0; m < 4; m++)
{
arrayMinMax[m] = new double[shapes_id.Count];
}
for (int m = 0; m < shapes_id.Count; m++)
{
GetBounds(out xmin, out ymin, out xmax, out ymax);
arrayMinMax[0][m] = xmin;
arrayMinMax[1][m] = ymin;
arrayMinMax[2][m] = xmax;
arrayMinMax[3][m] = ymax;
}
xmin = arrayMinMax[0].Min();
ymin = arrayMinMax[1].Min();
xmax = arrayMinMax[2].Max();
ymax = arrayMinMax[3].Max();
GetBounds为每个形状返回值,我需要找到所有形状的最小和最大点。 shapes_id.Count返回形状数量。
这段代码工作正常,但我仍然是c#的noob,我想知道我写的是正确的代码,或者有更好的方法。
感谢名单
答案 0 :(得分:1)
您是否需要稍后存储在数组中的值?如果不是,您可以在循环中确定最小值和最大值。所以你只迭代一次不是5次。
double xmin = double.MaxValue, ymin =double.MaxValue , xmax = double.MinValue, ymax = double.MinValue;
foreach (var shape in shapesId) {
double txmin, txmax, tymin, tymax;
GetBounds(out txmin, out txmax, out tymin, out tymax);
if (txmin < xmin) xmin = txmin;
if (tymin < ymin) ymin = tymin;
if (txmax > xmax) xmax = txmax;
if (tymax > ymax) ymax = tymax;
}
答案 1 :(得分:0)
double max(double[] a){
double max = a[0];
for(int i = 0; < a.Length; i++){
if(max < a[i]) max = a[i];
}
return max;
}
min以类似的方式。
然后调用max(arrayMinMax[1]);
答案 2 :(得分:0)
如果您只对某些值感兴趣,我会避免构建整个数组。这是一个示例,当找到更大或更小的值时会立即丢弃之前的max
或min
值。
double xmin, ymin, xmax, ymax;
xmin = ymin = double.PositiveInfinity;
xmax = ymax = double.NegativeInfinity;
for (int m = 0; m < shapes_id.Count; m++)
{
double x1, y1, x2, y2;
GetBounds(out x1, out y1, out x2, out y2);
xmin = Math.Min(x1, xmin);
ymin = Math.Min(y1, ymin);
xmax = Math.Max(x2, xmax);
ymax = Math.Max(y2, ymax);
}