Maison >développement back-end >Golang >Comment garantir une sortie ordonnée lors d'une itération sur des cartes Go ?

Comment garantir une sortie ordonnée lors d'une itération sur des cartes Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-28 01:16:15682parcourir

How to Guarantee Ordered Output When Iterating Over Go Maps?

Maps in Go : maintien de l'ordre et accès aux éléments

Dans Go, les cartes offrent un moyen dynamique et efficace de stocker des paires clé-valeur. Cependant, contrairement aux tableaux ou aux tranches, les cartes ne sont pas automatiquement triées. Cela peut conduire à une sortie qui apparaît dans le désordre lors d'une itération sur eux.

L'extrait de code suivant illustre ce comportement :

package main

import (
    "fmt"
)

type monthsType struct {
    no   int
    text string
}

var months = map[int]string{
    1:"January", 2:"Fabruary", 3:"March", 4:"April", 5:"May", 6:"June",
    7:"July", 8:"August", 9:"September", 10:"October", 11:"Novenber", 12:"December",
}

func main(){
    for no, month := range months {
        fmt.Print(no)
        fmt.Println("-" + month)
    }
}

Lorsque vous exécutez ce code, vous remarquerez que la carte n'imprime pas dans l'ordre des touches (numéros 1 à 12). Au lieu de cela, il s'imprime dans un ordre apparemment aléatoire.

Solution : Contrôler l'ordre dans Maps

Pour obtenir une carte à imprimer dans un ordre spécifique, vous disposez de plusieurs options. peut envisager :

1. Utiliser un tableau :
Si l'ordre est critique, vous pouvez utiliser un tableau pour stocker des éléments de manière séquentielle. Les tableaux fournissent une structure de données ordonnée où vous pouvez accéder aux éléments directement à l'aide de leur index.

2. Clés de tri :
Si vous devez conserver la carte en tant que structure de données, vous pouvez obtenir une liste triée de clés à l'aide de la fonction sort.Ints, parcourir les clés triées et récupérer les valeurs correspondantes de la carte. .

Exemple de code :

package main

import (
    "fmt"
    "sort"
)

type monthsType struct {
    no   int
    text string
}

var months = map[int]string{
    1:"January", 2:"Fabruary", 3:"March", 4:"April", 5:"May", 6:"June",
    7:"July", 8:"August", 9:"September", 10:"October", 11:"Novenber", 12:"December",
}

func main(){
    var sortedKeys []int
    for key := range months {
        sortedKeys = append(sortedKeys, key)
    }
    sort.Ints(sortedKeys)

    fmt.Println("Printing in order:")
    for _, key := range sortedKeys {
        fmt.Printf("%d-%s", key, months[key])
    }
}

Dans ce code, le tableau sortedKeys est créé pour stocker les clés de la carte par ordre croissant. Nous parcourons ensuite les clés triées et accédons aux valeurs correspondantes à partir de la carte. Cela produit le résultat suivant :

Printing in order:
1-January2-Fabruary3-March4-April5-May6-June7-July8-August9-September10-October11-Novenber12-December

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