Νομίζεις ότι οι χάρτες (map) στο Go θα είναι ταξινομημένοι;
sobes.tech AI
Απάντηση από AI
Κατά την προεπιλογή, η επανάληψη σε ένα map στη Go δεν εγγυάται τη σειρά των στοιχείων. Η σειρά μπορεί να αλλάξει σε κάθε διαδρομή. Αυτό οφείλεται στον τρόπο υλοποίησης των εσωτερικών δομών δεδομένων για το map, ώστε να επιτευχθεί υψηλή απόδοση.
Ωστόσο, υπάρχουν αρκετοί τρόποι για να επιτύχετε μια ταξινομημένη διαδρομή:
-
Ταξινόμηση των κλειδιών: Λάβετε όλα τα κλειδιά του map, ταξινομήστε τα και στη συνέχεια διασχίστε το map χρησιμοποιώντας τα ταξινομημένα κλειδιά.
// Παράδειγμα ταξινόμησης κλειδιών package main import ( "fmt" "sort" ) func main() { 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) // Ταξινόμηση των συμβολοσειρών, υπάρχει και sort.Ints, κ.λπ. for _, k := range keys { fmt.Println(k, m[k]) } } -
Χρήση δομών δεδομένων που εγγυώνται τη σειρά: Αν η σειρά είναι κρίσιμη, μπορείτε να χρησιμοποιήσετε άλλες δομές δεδομένων αντί για maps ή να υλοποιήσετε τη δική σας. Για παράδειγμα, μια λίστα ζευγών κλειδιού-τιμής που διατηρείται σε ταξινομημένη κατάσταση.
Έτσι, τα τυπικά maps στη Go δεν είναι ταξινομημένα, αλλά η σειρά μπορεί να επιτευχθεί με πρόσθετες λειτουργίες.