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

假设我有一个整数数组:

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

我有另一个整数:

 n = 6 

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

 foo(n) #=> 5 

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

谢谢

使用select后跟max

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

结果:

 5 

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

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

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

例如:

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