👋

#bsearch_last を追加する提案

2024/05/01に公開

[Feature #19075] Binary searching for the last element

  • #bsearch で最後に見つかった要素を返す #bsearch_last を追加する提案
# #bsearch は条件に当てはまった『最初の要素』を返す
array = [10, 15, 20, 25]
array.bsearch { |x| x > 18 } # => 20
# #bsearch_last は条件に当てはまった『最後の要素』を返す
array = [10, 15, 20, 25]
array.bsearch_last { |x| x < 18 }  # => 15

# 上記を #bsearch で実装する場合は以下のような実装になる
array = [10, 15, 20, 25]
index = array.bsearch_index { |x| !(x < 18) }
array[index-1] # => 15
  • 以下のようにキーワード引数で制御できるようにするといいんじゃないか、みたいなコメントもされている
a = [2, 3, 5, 7, 11]
a.bsearch {|x| x >= 6 } # => 7
a.bsearch(target: :first) {|x| x >= 6 } # same as a.bsearch { ... }
a.bsearch(target: :last) {|x| x <= 6 } # => 5
a.bsearch(target: :first) {|x| 0 } # => 2
a.bsearch(target: :last) {|x| 0 } # => 11
GitHubで編集を提案

Discussion