Есть ли поиск, который возвращает индекс, а не значение?

Ruby Array#bsearch предполагает отсортированный массив, принимает блок, возвращающий true/false, и использует двоичный поиск, чтобы найти первый элемент, для которого блок возвращает true. Например:

ary = [0, 4, 7, 10, 12]
ary.bsearch {|x| x >=   4 } #=> 4

Мне нужна версия, которая также использует бинарный поиск, но возвращает индекс найденного значения, а не само значение. В приведенном выше примере он вернет 1.

Я не смог найти такой встроенный метод - есть ли он? Если нет, есть ли другие встроенные функции, которые я мог бы использовать для достижения этой цели? В качестве альтернативы, есть ли в Ruby встроенные структуры, которые поддерживают как поиск, так и вставку в n log n времени?


person Jonah    schedule 05.09.2015    source источник
comment
Вы можете попробовать что-то вроде ary.index(ary.bsearch { |x| x >= 4 })   -  person Piccolo    schedule 06.09.2015
comment
@Piccolo, ваше предложение будет O (n), а не O (n log n).   -  person Jonah    schedule 06.09.2015