2010-04-27 120 views
0

什么是找到一个范围中的值闭合的最佳方式...寻找距离最近的号码?

例如我有0,90,180,270,360 .. 并有一批46 ...

阵列

在数组中找到90的最佳方法是什么?

(in actipnscript 3)

回答

2

你想如何定义最接近的?

如果您的意思是最小差异,那么循环遍历每个值,计算差异的绝对值,记下看到的最小值。

如果列表按照大小排序,那么当您看到大于最小找到的差值时停止,esle遍历整个集合。

+1

+1。如果数组不经常更改,您应该尝试保持排序并采用第二种方法。 – back2dos 2010-04-27 08:36:57

1

如果阵列严丝合缝您的图案的例子([0,90,180,270,360]),它似乎是角度通过90°的步骤中分离,然后就可以这样做:

var range:Array=[0, 90, 180, 270, 360]; 

function getIndexFrom(value:Number):int { 

// keep the value in range (0, 360) 
if (value<0) { 
    value= 360 - (-value % 360); 
} else if (value>360) { 
    value=value % 360; 
} 

return int(0.5 + (value/90.0)); 
} 
1
var range:Array=[0, 90, 180, 270, 360]; 
trace(range.indexOf(90)); 
+0

这没有找到最接近的号码。 – fgb 2012-12-01 21:07:50