Ruby: Круглое число вниз к ближайшему числу на основе произвольного списка чисел

Скажите, что у меня есть массив целых чисел:

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

и у меня есть другое целое число:

n = 6

Мне нужна функция, которая округляет в меньшую сторону до ближайшего числа от массива:

foo(n) #=> 5

Как Вы видите, числа не имеют фиксированного шаблона. Что изящный путь состоит в том, чтобы сделать это?

Спасибо

9
задан user94154 1 July 2010 в 18:21
поделиться

2 ответа

Используйте select , затем max :

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

Результат:

5

Это выполняется в линейном времени и не требует, чтобы массив был отсортировано.

15
ответ дан 4 December 2019 в 12:59
поделиться

Если вы используете относительно небольшие массивы (и поэтому не слишком беспокоитесь об эффективности), тогда это должно работать нормально:

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
1
ответ дан 4 December 2019 в 12:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: