Maison > développement back-end > Golang > Pourquoi l'itération Go Map n'est-elle pas ordonnée et comment puis-je garantir l'ordre ?

Pourquoi l'itération Go Map n'est-elle pas ordonnée et comment puis-je garantir l'ordre ?

Susan Sarandon
Libérer: 2024-12-29 05:20:13
original
255 Les gens l'ont consulté

Why is Go Map Iteration Unordered, and How Can I Guarantee Order?

Impression de cartes Go hors service

Dans Go, les cartes sont implémentées à l'aide d'une table de hachage, qui conserve les paires clé-valeur dans un format non -mode commandée. Par conséquent, parcourir une carte ne garantit pas l'ordre dans lequel les clés ou les valeurs seront renvoyées.

Pourquoi l'impression de la carte est-elle hors service ?

Dans le code fourni, la carte des mois est définie avec des paires clé-valeur représentant les numéros de mois et les noms correspondants. Lors d'une itération sur la carte à l'aide d'une plage, l'ordre de la sortie imprimée est basé sur l'implémentation interne de la table de hachage, qui est généralement optimisée pour les performances plutôt que pour l'ordre.

Comment corriger l'ordre

Il existe plusieurs approches pour garantir l'ordre d'itération de la carte :

1. Utiliser une carte ordonnée :

Go n'a pas de type de carte ordonnée intégré, mais il existe des bibliothèques tierces qui fournissent cette fonctionnalité. L'une de ces bibliothèques est "github.com/golang/collections#OrderedMap."

import "github.com/golang/collections#OrderedMap"

func main() {
    m := collections.NewOrderedMap()
    m.Set(1, "January") // ...

    for _, month := range m.Keys() {
        fmt.Println(month, "-", m.Get(month))
    }
}
Copier après la connexion

2. Trier les clés de la carte :

Une autre option consiste à récupérer les clés de la carte, à les trier, puis à parcourir les clés triées pour accéder aux valeurs dans l'ordre.

func main() {
    keys := make([]int, 0, len(months))
    for k := range months {
        keys = append(keys, k)
    }

    sort.Ints(keys)

    for _, k := range keys {
        fmt.Println(k, "-", months[k])
    }
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal