【Ruby3.x】Range::bsearch()メソッドの使い方
bsearchメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
bsearchメソッドは、Rangeオブジェクトに対して二分探索を実行するメソッドです。このメソッドは、ソート済みの範囲や、特定の条件によって二分できる性質を持つ範囲から、目的の要素を効率的に探索するために利用されます。
bsearchメソッドはブロックを受け取り、そのブロックの評価結果に基づいて探索を進めます。主に二つの探索モードが存在します。
一つ目のモードは「Find-minimum/maximumモード」と呼ばれます。このモードでは、ブロックはtrueまたはfalseのブール値を返す必要があります。例えば、ある値より大きい最小の要素や、ある条件を満たす最大の要素を探す際に利用されます。このモードは、ブロックがfalseからtrueへと切り替わる点、あるいはその逆の点を効率的に見つけ出すのに適しています。
二つ目のモードは「Find-anyモード」と呼ばれます。このモードでは、ブロックは負の数、ゼロ、または正の数を返す必要があります。探索は、ブロックがゼロを返した要素を見つけるまで続きます。ブロックがゼロを返した要素が見つかると、それが探索結果として返されます。これは、特定のキーに合致する要素を効率的に見つけたい場合に役立ちます。
探索が成功した場合、bsearchメソッドは条件を満たす要素を返します。しかし、指定された条件に合致する要素が範囲内に見つからなかった場合は、nilを返します。bsearchメソッドを利用することで、特に広大なデータ範囲の中から、目的の情報を高速に探し出すことが可能となり、アプリケーションのパフォーマンス向上に貢献します。
構文(syntax)
1(0..100).bsearch { |x| x >= 42 }
引数(parameters)
引数なし
引数はありません
戻り値(return)
Object または nil
Range#bsearch は、ブロックが真を返した最初の要素を返します。条件に合致する要素が見つからなかった場合は nil を返します。