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