Ruby:根据任意数字列表将舍入数字降至最接近的数字

时间:2010-07-01 18:13:32

标签: ruby arrays rounding

说我有一个整数数组:

arr = [0,5,7,8,11,16]

我有另一个整数:

n = 6

我需要一个向下舍入到数组中最接近的数字的函数:

foo(n) #=> 5

如您所见,数字没有固定的模式。这是一种优雅的方式吗?

由于

2 个答案:

答案 0 :(得分:15)

使用select后跟max

arr = [0,5,7,8,11,16]
puts arr.select{|item| item < 6}.max

结果:

5

这是以线性时间运行的,不需要对数组进行排序。

答案 1 :(得分:1)

如果你使用相对较小的数组(因此不要过分担心效率),那么这应该可行:

def down_to_array num, arr
  arr.select{|y| y < num}.sort_by{|z| num-z }.first
end

E.g:

myarr = [0,5,7,8,11,16]
puts down_to_array 6.5, myarr #=> 5