数组 – Ruby 2.0.0 Array#bsearch行为
发布时间:2020-12-16 19:56:54 所属栏目:百科 来源:网络整理
导读:我注意到,从 Ruby 2.0.0开始,数组类有一个我正在测试的bsearch方法,我没有得到我期望的行为.为什么它返回2和5的值,但对于-1,1和4返回零? arr_in = [-1,1,2,4,5]arr_in.bsearch { |x| x == 3 } #= nilarr_in.bsearch { |x| x == -1 } #= nilarr_in.bsearch {
我注意到,从
Ruby 2.0.0开始,数组类有一个我正在测试的bsearch方法,我没有得到我期望的行为.为什么它返回2和5的值,但对于-1,1和4返回零?
arr_in = [-1,1,2,4,5] arr_in.bsearch { |x| x == 3 } #=> nil arr_in.bsearch { |x| x == -1 } #=> nil arr_in.bsearch { |x| x == 1 } #=> nil arr_in.bsearch { |x| x == 2 } #=> 2 arr_in.bsearch { |x| x == 4 } #=> nil arr_in.bsearch { |x| x == 5 } #=> 5 解决方法arr_in = [-1,5] arr_in.bsearch{ |x| 2 - x } #=> 2 arr_in.bsearch{ |x| -1 - x } #=> -1 arr_in.bsearch{ |x| 3 - x } #=> nil 二进制搜索使用块的结果作为提示,应选择阵列的哪一部分(左侧或右侧)用于在下一次迭代中进行搜索.如果块返回0,它将停止搜索.如果它返回少于0,它会走到左边,否则它是正确的:) 更多信息在这里 UPD 好的,让我们举个例子 arr_in = [-1,5] arr_in.bsearch { |x| x == 3 } 首先,我们将中间元素(2)并将其输出到块中. 2 == 3将返回false,所以我们移动到数组的右侧. 我们取[5,5]的中间元素,5和5 == 3是假的 右边没有任何元素,所以我们将返回零 arr_in = [-1,5] arr_in.bsearch { |x| x == 2 } 前2 == 2是真的.我们去左边 [-1,1]的中间元素是1. 1 == 2是假的.我们去右边 在[-1,1]中没有任何元素到1,所以我们返回最后一个返回true的元素,它是2 PS:别忘了,该数组应该被排序;) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |