Go Programming Language Specification का कहना है:जाओ: मानचित्र कुंजी के लिए पुनरावृत्ति आदेश निर्धारित करता है?
3. यात्रा के क्रम नक्शे से अधिक निर्दिष्ट नहीं है। [...]
यह उम्मीद की जा सकती है कि नक्शा प्रकार को हैश तालिका के रूप में लागू किया जा सकता है, या एक खोज पेड़ के रूप में, या कुछ अन्य डेटा संरचना के रूप में। लेकिन map
वास्तव में गो में लागू किया गया है?
अलग ढंग से कहें तो क्या
for k, _ := range m { fmt.Println(k) }
में चाबियों का यात्रा क्रम निर्धारित करता है मैं के बाद मैंने देखा कि string
कुंजी के साथ एक नक्शे के जाहिरा तौर पर एक निश्चित यात्रा के क्रम है इस के बारे में सोच शुरू कर दिया। जैसे
package main
import ("fmt"; "time"; "rand")
func main() {
rand.Seed(time.Seconds())
words := [...]string{"foo", "bar", "a", "b", "c", "hello", "world",
"0", "1", "10", "100", "123"}
stringMap := make(map[string]byte)
for i := range rand.Perm(len(words)) {
stringMap[words[i]] = byte(rand.Int())
}
fmt.Print("stringMap keys:")
for k, _ := range stringMap { fmt.Print(" ", k) }
fmt.Println()
}
एक कार्यक्रम प्रिंट मेरी मशीन पर निम्न:
stringMap keys: a c b 100 hello foo bar 10 world 123 1 0
परवाह किए बिना प्रविष्टि के आदेश की।
map[byte]byte
मानचित्र के साथ समकक्ष प्रोग्राम भी एक शफल क्रम में कुंजी प्रिंट करता है, लेकिन यहां कुंजी आदेश सम्मिलन आदेश पर पर निर्भर करता है।
यह सब कैसे लागू किया गया है? map
पूर्णांक और तारों के लिए विशिष्ट है?
दिलचस्प। क्या आप स्रोत कोड को इंगित कर सकते हैं? –
अंतर्दृष्टि के लिए धन्यवाद! यह जानना अच्छा है कि गो 1 इसे यादृच्छिक बनाएगा क्योंकि इससे गलती से कुंजी आदेश पर भरोसा करने के लिए मामलों को ढूंढना बहुत आसान हो जाता है। –
@dystoy सी स्रोत कोड: http://code.google.com/p/go/source/browse/src/pkg/runtime/hashmap.c?name=release.r60.3 http://code.google .com/p/go/source/ब्राउज़/src/pkg/runtime/hashmap.c? name = साप्ताहिक.2012-03-04 –