Скажите, что у меня есть массив целых чисел:
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