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
द्विआधारी खोज एक संकेत है जो सरणी (छोड़ दिया है या सही पक्ष) के हिस्से के अगले चरण पर खोज के लिए चुना जाना चाहिए के रूप में ब्लॉक के परिणाम का उपयोग करता है। यदि ब्लॉक 0 देता है तो यह खोजना बंद कर देगा। यह कम तो 0 रिटर्न छोड़ दिया जाने देंगे अन्यथा यह सही हो जाता है :)
यहाँ
अधिक जानकारी http://www.ruby-doc.org/core-2.1.1/Array.html#method-i-bsearch
युपीडी
ठीक है, के अपने उदाहरण
arr_in = [-1, 1, 2, 4, 5]
arr_in.bsearch { |x| x == 3 }
सबसे पहले लेते हैं हम मध्यम तत्व (2) लेंगे और इसे ब्लॉक में लाएंगे। 2 == 3
false
वापस करेगा, इसलिए हम सरणी के दाहिने तरफ जाते हैं।
हम [4, 5]
जो 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]
में कोई किसी भी तत्व नहीं है, इसलिए हम पिछले पिछले तत्व जो true
बयान जो है 2
पुनश्च लौटे वापसी: भूल नहीं है, कि सरणी सॉर्ट किया जाना चाहिए;)
आपको समझाया जाना चाहिए कि * न्यूनतम मोड * में क्या हुआ *? चूंकि ओपी के उदाहरण इस से संबंधित हैं। –
@ArupRakshit मैं हालांकि लेखक खोजने के बारे में पूछ रहा हूं, है ना? – fl00r
मुझे ऐसा नहीं लगता .. –