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
Susan Sarandonoriginal
2024-12-29 05:20:13277parcourir

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))
    }
}

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])
    }
}

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!

Déclaration:
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