bsearch_index 的奇怪行为
Strange behavior with bsearch_index
tmp = [-3,3,5]
p "test: #{tmp.bsearch_index{|j| j == -3}}"
在上面的代码中,我得到的响应为 nil。如果我将 j 与 3 或 5 进行比较,它就会起作用。为什么 bsearch_index 不考虑第一个元素?
你需要写
tmp.bsearch_index{|n| n >= -3} #=> 0
这使用Array#bsearch_index的查找最小值模式,return是数组中满足块中表达式的最小值。例如,
tmp.bsearch { |n| n >= 0 } #=> 3
tmp.bsearch_index { |n| n >= 0 } #=> 1
在此模式下,要为 Array#bsearch 引用文档,“该块必须始终 return true 或 false,并且必须有一个索引 i
(0 <= i <= ary.size
) 这样块 return 对于索引小于 i
的任何元素都是假的,块 return 对于索引大于或等于 [=] 的任何元素都是真15=]。此方法 return 是第 i
个元素。如果 i
等于 ary.size
,它 return 是 nil
。 “
如果该块是 { |n| n == -3 }
,则不会有索引 i
,0 <= i <= tmp.size #=> 3
具有 属性,tmp[j] == -3
对所有 j < i
并且对所有 j >= 1
.
都是正确的
如果块计算是 tmp[j] == 5
将满足要求(对于索引 2
),因此正确的值将是 returned。如果块计算是 tmp[j] == 3
则不满足要求 (tmp[2] == 3 #=> false
);正确的索引是 returned 的事实只是由于该方法的实现方式。如果
tmp = [-3, 3, 5, 6]
然后 nil
被 returned 用于 n == 3
以及 n == -3
:
tmp.bsearch_index { |n| n == 3 } #=> nil
bsearch
有第二种模式,找到任何模式。 (有关详细信息,请参阅 Array#bsearch
的文档。)在这种情况下,我们可能会编写以下内容之一:
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
被 returned,则此模式在这里很有用。在其他情况下,它有多种用途。
tmp = [-3,3,5]
p "test: #{tmp.bsearch_index{|j| j == -3}}"
在上面的代码中,我得到的响应为 nil。如果我将 j 与 3 或 5 进行比较,它就会起作用。为什么 bsearch_index 不考虑第一个元素?
你需要写
tmp.bsearch_index{|n| n >= -3} #=> 0
这使用Array#bsearch_index的查找最小值模式,return是数组中满足块中表达式的最小值。例如,
tmp.bsearch { |n| n >= 0 } #=> 3
tmp.bsearch_index { |n| n >= 0 } #=> 1
在此模式下,要为 Array#bsearch 引用文档,“该块必须始终 return true 或 false,并且必须有一个索引 i
(0 <= i <= ary.size
) 这样块 return 对于索引小于 i
的任何元素都是假的,块 return 对于索引大于或等于 [=] 的任何元素都是真15=]。此方法 return 是第 i
个元素。如果 i
等于 ary.size
,它 return 是 nil
。 “
如果该块是 { |n| n == -3 }
,则不会有索引 i
,0 <= i <= tmp.size #=> 3
具有 属性,tmp[j] == -3
对所有 j < i
并且对所有 j >= 1
.
如果块计算是 tmp[j] == 5
将满足要求(对于索引 2
),因此正确的值将是 returned。如果块计算是 tmp[j] == 3
则不满足要求 (tmp[2] == 3 #=> false
);正确的索引是 returned 的事实只是由于该方法的实现方式。如果
tmp = [-3, 3, 5, 6]
然后 nil
被 returned 用于 n == 3
以及 n == -3
:
tmp.bsearch_index { |n| n == 3 } #=> nil
bsearch
有第二种模式,找到任何模式。 (有关详细信息,请参阅 Array#bsearch
的文档。)在这种情况下,我们可能会编写以下内容之一:
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
被 returned,则此模式在这里很有用。在其他情况下,它有多种用途。