Sobes.tech
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])
}

Έτσι, θα λάβετε τα στοιχεία σε ταξινομημένη σειρά.