Junior — Middle
Γιατί όταν χρησιμοποιούμε map, η σειρά των στοιχείων δεν είναι εγγυημένη και φαίνεται τυχαία;
sobes.tech AI
Απάντηση από AI
Στο Go, η ενσωματωμένη δομή map υλοποιείται χρησιμοποιώντας έναν πίνακα κατακερματισμού, και η σειρά δια traversing των στοιχείων δεν εγγυάται και μπορεί να αλλάξει μεταξύ των επαναλήψεων. Αυτό οφείλεται στο:
- Η συνάρτηση κατακερματισμού διανέμει τα κλειδιά σε κάδους, και η σειρά των κάδων δεν είναι σταθερή.
- Για ασφάλεια και για την αποφυγή εξάρτησης από τη σειρά, από το Go 1.0, η σειρά δια traversing του map τυχαία ειδικά σε κάθε επανάληψη.
Επομένως, κατά την δια traversing ενός map, η σειρά των στοιχείων φαίνεται τυχαία και δεν πρέπει να χρησιμοποιείται στη λογική του προγράμματος. Αν χρειάζεται ταξινομημένη έξοδος, πρέπει να ταξινομηθούν ξεχωριστά τα κλειδιά:
m := map[string]int{"b": 2, "a": 1, "c": 3}
keys := make([]string, 0, len(m))
for k := range m {
keys = append(keys, k)
}
sort.Strings(keys)
for _, k := range keys {
fmt.Println(k, m[k])
}
Έτσι, θα λάβετε τα στοιχεία σε ταξινομημένη σειρά.