👋
#bsearch_last を追加する提案
[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
- 以下のようにキーワード引数で制御できるようにするといいんじゃないか、みたいなコメントもされている
- https://bugs.ruby-lang.org/issues/19075#note-1
- 他には
bsearch(find: :last)
とかbsearch(reverse: true)
とか
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
- 色々と議論されているが
#bsearch_last
という名前は直感的ではないという理由でチケットは Close されている
Discussion