【问题标题】:Right way to get minimum and maximum value from variables从变量中获取最小值和最大值的正确方法
【发布时间】:2014-09-04 08:56:21
【问题描述】:

我需要从不同的变量中获取最小值和最大值。我得到变量值 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 返回每个形状的值,我需要一起找到所有形状的最小值和最大值。 shape_id.Count 返回我的形状数。

这段代码工作正常,但我仍然是 c# 的菜鸟,我想知道我写的代码是这样的,还是有更好的方法。

感谢

【问题讨论】:

    标签: c#


    【解决方案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;
    
    }
    

    【讨论】:

    • 也许我错了,但 txmin(例如)总是 >0,而不是我会得到 xmin 值 0?我需要先获取 xmin、ymin 等的 GetBounds,然后再使用 foreach,对吗?
    • 是的,你是对的,最小值应该用 double.MaxValue 初始化,最大值应该用 double.MinValue 初始化
    【解决方案2】:

    如果您只对某些值感兴趣,我会避免构建整个数组。这是一个示例,当找到更大或更小的值时,它会立即丢弃之前的 maxmin 值。

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

    【讨论】:

      【解决方案3】:
      double max(double[] a){
          double max = a[0];
          for(int i = 0;  < a.Length; i++){
             if(max < a[i]) max  = a[i];
         }
      
      return max;
      }
      

      分钟以类似的方式。

      然后调用max(arrayMinMax[1]);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-03
        • 2021-12-25
        • 1970-01-01
        • 2019-10-20
        • 1970-01-01
        相关资源
        最近更新 更多