2013-05-29 57 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