2011-01-07 19 views
11

क्या यह सिर्फ मुझे है, या फोबोस में कोई बाइनरी खोज फ़ंक्शन नहीं है? मेरे पास एक पूर्व-क्रमबद्ध सरणी है जिसे मैं अपने स्वयं के तुलनित्र फ़ंक्शन से खोजना चाहता हूं, लेकिन मुझे std.algorithms या std.containers में कुछ भी नहीं मिल रहा है।डी 2.0 (फाबोस) में बाइनरी खोज?

धन्यवाद! std.range से

उत्तर

16

उपयोग SortedRange:

http://www.digitalmars.com/d/2.0/phobos/std_range.html#SortedRange से cribbed:

auto a = [ 1, 2, 3, 42, 52, 64 ]; 
auto r = assumeSorted(a); 
assert(r.canFind(3)); 
assert(!r.canFind(32)); 
+0

आह, तुम उम्मीद नहीं थी "assumeSorted" का उपयोग करने के लिए है ... कि, धन्यवाद! :) – Mehrdad

+6

'ढूंढें()' (और इस प्रकार 'कैनफ़िंड() ') वास्तव में बहुत ही स्मार्ट है, जो कि विभिन्न प्रकार के इनपुट के आधार पर अलग-अलग एल्गोरिदम का उपयोग करता है। बाइनरी खोज को काम करने के लिए, डेटा को सॉर्ट करना होगा, इसलिए 'assumeSorted()' इसे बनाता है ताकि यह हो और फिर 'ढूंढें() 'और' canFind()' यह जान सकें कि बाइनरी खोज है तब सबसे अच्छी खोज, और यही वह है जो वे करते हैं। –

+3

यह सहज नहीं है कि आप बस बाइनरी खोज करने की कोशिश कर रहे हैं। – Trass3r

संबंधित मुद्दे