2013-05-29 45 views
-1

我有6个double值x,y,z,a,b,c。每次他们改变时我都需要最低限度的。比较不包含零的值吗?

到目前为止,我使用了Math.Min(),我通过检查是否不等于零并使用List.min()将它们添加到列表中。但每次值改变时,列表都不会自行更新。

该过程正在检查数千次,我需要一个快速的方法。

  1. 检查所有变量。
  2. 如果其中一个或多个为0,则不要进行比较。
  3. 取其他值的最小值。
  4. 重复,当按钮按下。

代码:

private void calculateRatio() 
{ 
     xRatio = 100 * (xStepCount/xAbsoluteDelta); 
     yRatio = 100 * (yStepCount/yAbsoluteDelta); 
     zRatio = 100 * (zStepCount/zAbsoluteDelta); 
     aRatio = 100 * (aStepCount/aAbsoluteDelta); 
     bRatio = 100 * (bStepCount/bAbsoluteDelta); 
     cRatio = 100 * (cStepCount/cAbsoluteDelta); 
} 

private void selectAxis() 
{ 
    minRatio = 100 * (Math.Min((double)xRatio, Math.Min((double)yRatio, Math.Min((double)zRatio, Math.Min((double)aRatio, Math.Min((double)bRatio, (double)cRatio)))))); 
} 
//without including zero, by updating every time step count changed. 
+2

什么是导致值改变?什么是监测这种变化?听起来真正的问题是检测到这些变化。有些代码可以帮助这个问题更有意义。 –

+0

另请注意,double值的平等比较可能无法提供期望的结果。 –

回答

3

所以,你要的算法,可以找到不为零的最低值?试试这个:

IEnumerable<double> values = new[] { x, y, z, a, b, c }; 
double nonZeroMin = values.Where(v => v != 0).Min(); 
+0

当值更改时,更新值是否与列表不同? – ithnegique

+1

@ithnegique不需要。您需要一些代码来检测值何时更改并采取措施。没有看到你的*代码的结构如何,这很难推荐。 –

+0

这段代码就像是用'if'运行'for'循环。它不会更新,但每次按下按钮时都会在值本身上运行。 – SimpleVar