arr_in = [-1, 1,2,4,5]
arr_in.bsearch{ |x| 2 - x }
#=> 2
arr_in.bsearch{ |x| -1 - x }
#=> -1
arr_in.bsearch{ |x| 3 - x }
#=> nil
이진 검색은 다음 반복에 대한 검색을 위해 선택되어야한다 어레이 (좌측 또는 우측)의 일부 힌트로 블록의 결과를 사용한다. block이 0을 반환하면 검색이 중지됩니다. 그것은 왼쪽으로 갈 것입니다 0 적은 다음 반환하는 경우 그렇지 않으면 바로갑니다 :)
이 여기
더 많은 정보 http://www.ruby-doc.org/core-2.1.1/Array.html#method-i-bsearch
좋아 UPD,의 당신의 예를
arr_in = [-1, 1, 2, 4, 5]
arr_in.bsearch { |x| x == 3 }
먼저 보자 우리는 중간 요소 (2)를 취하여 그것을 블록으로 가져올 것입니다. 2 == 3
은 false
을 반환하므로 배열의 오른쪽으로 이동합니다.
우리는 5
입니다 [4, 5]
및 5 == 3
의 중간 요소를 false
오른쪽에는 어떤 요소가되지 가지고, 그래서 우리는 nil
arr_in = [-1, 1, 2, 4, 5]
arr_in.bsearch { |x| x == 2 }
먼저 2 == 2
이 true
입니다 반환합니다. 우리는 왼쪽으로 간다.
[-1, 1]
의 중간 요소는 1입니다. 1 == 2
은 false
입니다. 우린 오른쪽으로 간다.
이 바로 1-[-1, 1]
에는 어떤 요소가 없다, 그래서 우리는 2
PS입니다 true
문 반환 마지막 마지막 요소 반환 : 배열을 정렬해야 함을 잊지 마세요)
를
찾기 - 최소 모드 *에서 어떤 일이 발생했는지 설명해야합니다. OP의 예가 이와 관련되어 있습니다. –
@ArupRakshit 저자가 find-any에 관해 묻고 있지만, 그렇지 않습니까? – fl00r
나는 그렇게 생각하지 않는다. –