首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bsearch_index中的奇怪行为

bsearch_index中的奇怪行为
EN

Stack Overflow用户
提问于 2020-07-30 20:54:49
回答 1查看 85关注 0票数 1
代码语言:javascript
复制
tmp = [-3,3,5]
p "test: #{tmp.bsearch_index{|j| j == -3}}"

在上面的代码中,我得到的响应为零。如果我将j与3或5进行比较,它就会奏效。为什么bsearch_index不考虑第一个元素?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-30 21:30:07

你需要写

代码语言:javascript
复制
tmp.bsearch_index{|n| n >= -3}    #=> 0

这使用索引的查找最小模式,它返回数组中满足块中表达式的最小值。

代码语言:javascript
复制
tmp.bsearch { |n| n >= 0 }        #=> 3
tmp.bsearch_index { |n| n >= 0 }  #=> 1

在这种模式下,引用Array#bsearch的doc,“该块必须始终返回true或false,并且必须有索引i (0 <= i <= ary.size),以便该块对于索引小于i的任何元素返回false,对于索引大于或等于i的任何元素返回true。此方法返回i-th元素。如果i等于ary.size,则返回nil。”

如果该块为{ |n| n == -3 },则不存在索引i,即对于所有j < i具有tmp[j] == -3为false属性的索引0 <= i <= tmp.size #=> 3,对于所有j >= 1则为true。

如果块计算是tmp[j] == 5,则满足需求(对于索引2),因此将返回正确的值。如果块计算是tmp[j] == 3,则不满足需求(tmp[2] == 3 #=> false);返回正确索引的事实仅取决于实现方法的方式。如果

代码语言:javascript
复制
tmp = [-3, 3, 5, 6]

然后返回nil用于n == 3n == -3

代码语言:javascript
复制
tmp.bsearch_index { |n| n == 3 }  #=> nil

bsearch有第二种模式,查找任何模式。(有关Array#bsearch的详细信息,请参阅文档。)在这种情况下,我们可以编写以下内容之一:

代码语言:javascript
复制
tmp.bsearch_index { |n| -3 - n }  #=> 0   
tmp.bsearch_index { |n|  3 - n }  #=> 1
tmp.bsearch_index { |n|  5 - n }  #=> 2
tmp.bsearch_index { |n|  4 - n }  #=> nil

如果当数组中没有任何元素在块中计算为零时,则返回nil,则此模式在此将非常有用。在其他情况下,它有多种用途。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63181259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档