Ruby/Bsearch: 配列を 2分探索する Ruby用のライブラリ

Ruby/Bsearch は配列を 2分探索する Ruby用のライブラリです。ブ ロックで与えた条件にマッチする、最初の要素および最後の要素を 見つけます。

最新版は <URL:http://namazu.org/~satoru/ruby-bsearch/> から入手可能です

使用例

% irb -r ./bsearch.rb
>> %w(a b c c c d e f).bsearch_first {|x| x <=> "c"}
=> 2
>> %w(a b c c c d e f).bsearch_last {|x| x <=> "c"}
=> 5
>> %w(a b c e f).bsearch_first {|x| x <=> "c"}
=> 2
>> %w(a b e f).bsearch_first {|x| x <=> "c"}
=> nil
>> %w(a b e f).bsearch_last {|x| x <=> "c"}
=> nil
>> %w(a b e f).bsearch_lower_boundary {|x| x <=> "c"}
=> 2
>> %w(a b e f).bsearch_upper_boundary {|x| x <=> "c"}
=> 2
>> %w(a b c c c d e f).bsearch_range {|x| x <=> "c"}
=> 2...5
>> %w(a b c d e f).bsearch_range {|x| x <=> "c"}
=> 2...3
>> %w(a b d e f).bsearch_range {|x| x <=> "c"}
=> 2...2

説明図

API

Array#bsearch_first (ange = 0 ... self.length) {|x| ...}
ブロックで与えた条件にマッチする最初の要素の添字を返す。見つ からなかったら nil を返す。省略可能な引数 range は検索範囲を 指定する 昇順の配列を探索する場合はブロックを {|x| x <=> key} のように渡します。 降順の配列を探索する場合はブロックを {|x| key <=> x} のように渡します。 当然のことながら、配列は2分探索の前にソートしておく必要があります。
Array#bsearch_last (range = 0 ... self.length) {|x| ...}
ブロックで与えた条件にマッチする最後の要素の添字を返す。 見つからなかったら nil を返す。省略可能な引数 range は検 索範囲を指定する 昇順の配列を探索する場合はブロックを {|x| x <=> key} のように渡します。 降順の配列を探索する場合はブロックを {|x| key <=> x} のように渡します。 当然のことながら、配列は2分探索の前にソートしておく必要があります。
Array#bsearch_lower_boundary (range = 0 ... self.length) {|x| ...}
ブロックで与えた条件にマッチする下限の境界を返す。 省略可能な引数 range は検索範囲を指定する 昇順の配列を探索する場合はブロックを {|x| x <=> key} のように渡します。 降順の配列を探索する場合はブロックを {|x| key <=> x} のように渡します。 当然のことながら、配列は2分探索の前にソートしておく必要があります。
Array#bsearch_upper_boundary (range = 0 ... self.length) {|x| ...}
ブロックで与えた条件にマッチする上限の境界を返す。 省略可能な引数 range は検索範囲を指定する 昇順の配列を探索する場合はブロックを {|x| x <=> key} のように渡します。 降順の配列を探索する場合はブロックを {|x| key <=> x} のように渡します。 当然のことながら、配列は2分探索の前にソートしておく必要があります。
Array#bsearch_range (range = 0 ... self.length) {|x| ...}
ブロックで与えた条件にマッチする下限と上限の境界を Range オブジェクトとして返す。 省略可能な引数 range は検索範囲を指定する 昇順の配列を探索する場合はブロックを {|x| x <=> key} のように渡します。 降順の配列を探索する場合はブロックを {|x| key <=> x} のように渡します。 当然のことながら、配列は2分探索の前にソートしておく必要があります。
Array#bsearch (range = 0 ... self.length) {|x| ...}
Array#bsearch_first の別名

ダウンロード

Ruby のライセンスに従ったフリーソフトウェアとして公開します。 完全に無保証です。

satoru@namazu.org