instance method Array#bsearch_index

bsearch_index { |x| ... } -> Integer | nil[permalink][rdoc][edit]
bsearch_index -> Enumerator

ブロックの評価結果で範囲内の各要素の判定を行い、条件を満たす値の位置を二分探索(計算量は O(log n))で検索します。要素が見つからない場合は nil を返します。self はあらかじめソートしておく必要があります。

本メソッドはArray#bsearchと同様に、ブロックを評価した結果により2 つのモードで動作します。Array#bsearch との違いは見つかった要素自身を返すか位置を返すかのみです。各モードのより詳細な違いについては Array#bsearch を参照してください。

例: find-minimum モード

ary = [0, 4, 7, 10, 12]
ary.bsearch_index { |x| x >=   4 } # => 1
ary.bsearch_index { |x| x >=   6 } # => 2
ary.bsearch_index { |x| x >=  -1 } # => 0
ary.bsearch_index { |x| x >= 100 } # => nil
例: find-any モード

ary = [0, 4, 7, 10, 12]
# 4 <= v < 8 になる要素の位置を検索
ary.bsearch_index { |x| 1 - x / 4 } # => 2
# 8 <= v < 10 になる要素の位置を検索
ary.bsearch_index { |x| 4 - x / 2 } # => nil

[SEE_ALSO] Array#bsearch