Ruby Array#bsearch
предполагает отсортированный массив, принимает блок, возвращающий true/false, и использует двоичный поиск, чтобы найти первый элемент, для которого блок возвращает true. Например:
ary = [0, 4, 7, 10, 12]
ary.bsearch {|x| x >= 4 } #=> 4
Мне нужна версия, которая также использует бинарный поиск, но возвращает индекс найденного значения, а не само значение. В приведенном выше примере он вернет 1
.
Я не смог найти такой встроенный метод - есть ли он? Если нет, есть ли другие встроенные функции, которые я мог бы использовать для достижения этой цели? В качестве альтернативы, есть ли в Ruby встроенные структуры, которые поддерживают как поиск, так и вставку в n log n
времени?
ary.index(ary.bsearch { |x| x >= 4 })
- person Piccolo   schedule 06.09.2015