बस इसी तरह का सवाल था और इस थ्रेड में कुछ सुझावों को आज़माने का फैसला किया।
मैंने 3 प्रकार के लुकअप के सर्वश्रेष्ठ और सबसे खराब मामलों को देखा है:
- मानचित्र का उपयोग करना
- एक सूची का उपयोग कर
- स्विच स्टेटमेंट का उपयोग करना
यहाँ एक फ़ंक्शन कोड है:
func belongsToMap(lookup string) bool {
list := map[string]bool{
"900898296857": true,
"900898302052": true,
"900898296492": true,
"900898296850": true,
"900898296703": true,
"900898296633": true,
"900898296613": true,
"900898296615": true,
"900898296620": true,
"900898296636": true,
}
if _, ok := list[lookup]; ok {
return true
} else {
return false
}
}
func belongsToList(lookup string) bool {
list := []string{
"900898296857",
"900898302052",
"900898296492",
"900898296850",
"900898296703",
"900898296633",
"900898296613",
"900898296615",
"900898296620",
"900898296636",
}
for _, val := range list {
if val == lookup {
return true
}
}
return false
}
func belongsToSwitch(lookup string) bool {
switch lookup {
case
"900898296857",
"900898302052",
"900898296492",
"900898296850",
"900898296703",
"900898296633",
"900898296613",
"900898296615",
"900898296620",
"900898296636":
return true
}
return false
}
सर्वश्रेष्ठ मामले परिदृश्य सूची में पहला आइटम चुनते हैं, सबसे खराब स्थिति कोई भी शून्य मान का उपयोग नहीं करता है।
यहाँ परिणाम हैं:
BenchmarkBelongsToMapWorstCase-4 2000000 787 ns/op
BenchmarkBelongsToSwitchWorstCase-4 2000000000 0.35 ns/op
BenchmarkBelongsToListWorstCase-4 100000000 14.7 ns/op
BenchmarkBelongsToMapBestCase-4 2000000 683 ns/op
BenchmarkBelongsToSwitchBestCase-4 100000000 10.6 ns/op
BenchmarkBelongsToListBestCase-4 100000000 10.4 ns/op
स्विच सभी तरह से जीतता है, सबसे खराब स्थिति सबसे अच्छे मामले की तुलना में सबसे तेज है। नक्शे सबसे खराब हैं और सूची स्विच करने के करीब है।
इसलिए नैतिक है: यदि आपके पास एक स्थिर, यथोचित छोटी सूची है, तो स्विच स्टेटमेंट जाने का रास्ता है।