我需要在一個範圍內創建一個數字數組,如:在數組中分配範圍
[1..5] 10次= [1,1,2,2,3,3,4, -1,4,5,5-]
[1..5]中的5倍= [1,2,3,4,5]
[1..5]中的3倍= [1,3, 5]
def distribute(start_value, end_value, times, is_integer)
array = Array.new(times-1)
min_value = [end_value,start_value].min
max_value = [end_value,start_value].max
if max_value-min_value<times
factor = (max_value-min_value).abs/(array.size).to_f
else
factor = (max_value-min_value).abs/(array.size-1).to_f
end
for i in 0..array.size
v = [ [max_value, factor*(i+1)].min, min_value].max
is_integer ? array[i] = v.round : array[i] = v
end
start_value < end_value ? array : array.reverse
end
分發(1,5,10,真) => [1,1,1,2,2,3,3,4,4,4 ] #WRONG應該是[1,1,2,2,3,3,4,4,5,5]
distribute(5,1,5,true) => [5,4,3, 2,1] #OK
分發(1,5,3,真) =>並[4,5,5] #WRONG應該是[1,3,5]
而不是複雜的特殊情況下的算法,你可以短路的方法:'返回[]除非array_size> 0'。至少對我來說,這樣更容易理解代碼。 – FMc 2009-11-23 14:08:35