2012-11-23 25 views
7

मैं गो के साथ खुद को परिचित करने की कोशिश कर रहा हूं और इसलिए कुछ खोज फ़ंक्शन लागू करने की कोशिश कर रहा था लेकिन कंटेनर प्रकारों के लिए दस्तावेज़ों को देख रहा था, इनबिल्ट प्रकार में से कोई भी contains विधि लागू नहीं करता है। क्या मुझे कुछ याद आ रहा है और यदि मैं सदस्यता के लिए परीक्षण के बारे में कैसे नहीं जाता? क्या मुझे अपनी खुद की विधि को लागू करना है या मुझे सभी तत्वों के माध्यम से पुन: प्रयास करना है। यदि ऐसा है तो कंटेनर प्रकारों के लिए इस प्राथमिक विधि को छोड़ने के पीछे तर्क क्या है?कंटेनर प्रकार गो

+0

आप किस कंटेनर प्रकार के बारे में बात कर रहे हैं? –

+0

सामान्य सूची – cobie

+2

यह मानक दोगुनी जुड़ा हुआ सूची है। एक फ़ंक्शन फ़ंक्शन जोड़ने से आपको यह सोचने में मदद मिलेगी कि इसे कुशलता से किया जा सकता है। यदि आप बस पुनरावृत्ति से कुछ अधिक कुशल चाहते हैं, तो आपको शायद एक और संरचना की आवश्यकता हो सकती है, शायद एक नक्शा। –

उत्तर

7

मानक लाइब्रेरी के कंटेनर प्रकारों को तत्वों को खींचते समय आप प्रकार के दावों की आवश्यकता होती है। कंटेनरों के पास सदस्यता के लिए परीक्षण करने का कोई तरीका नहीं है क्योंकि वे नहीं जानते कि वे किस प्रकार के हैं और तुलना करने का कोई तरीका नहीं है।

रिक Szopa की स्किप सूची कार्यान्वयन जो आप खोज रहे हैं वह हो सकता है। इसमें एक सेट प्रकार है जो एक विधि विधि लागू करता है।

https://github.com/ryszard/goskiplist

मैं उत्पादन में यह प्रयोग कर रहे हैं और इसके साथ बहुत खुश हूँ।

+0

स्टीफन संपादित करने के लिए धन्यवाद। टाइप करें दावा सही है। यह एक नजर था और पल सीखना था। :-) – Daniel

4

मानचित्र एक अंतर्निहित प्रकार हैं जिसमें "शामिल" निर्माण है, हालांकि कोई विधि नहीं है।

http://play.golang.org/p/ddpmiskxqS

package main 

import (
    "fmt" 
) 

func main() { 
    a := map[string]string{"foo": "bar"} 
    _, k := a["asd"] 
    fmt.Println(k) 
    _, k = a["foo"] 
    fmt.Println(k) 
} 
3
कंटेनर/सूची पैकेज के साथ

, आप चीज़ों को खोजने के लिए अपने स्वयं के पाश में लिखें। पैकेज में प्रदान नहीं किए जाने का तर्क शायद डाइस्ट्रॉय ने कहा है, जो ओ (एन) ऑपरेशन को छुपाएगा।

आप कोई विधि नहीं जोड़ सकते हैं, तो आप बस एक लूप लिखें।

for e := l.Front(); e != nil; e = e.Next() { 
    data := e.Value.(dataType) // type assertion 
    if /* test on data */ { 
     // do something 
     break 
    } 
} 

यह काफी आसान है और ओ (एन) जटिलता स्पष्ट है।

खोज समर्थन का समर्थन करने वाले गो के साथ आपूर्ति की गई डेटा संरचनाओं की आपकी समीक्षा में, सॉफ़्टवेयर पैकेज को याद न करें। कार्यों में ओ (एन लॉग (एन)) में एक स्लाइस को सॉर्ट करने की अनुमति दी जाती है और फिर बाइनरी ओ (लॉग (एन)) समय में खोज की जाती है।

आखिरकार डैनियल ने सुझाव दिया, तीसरे पक्ष के पैकेज पर विचार करें। कंटेनर प्रकारों के लिए कुछ लोकप्रिय और परिपक्व पैकेज हैं।