Maison  >  Article  >  développement back-end  >  Comment puis-je garantir une itération ordonnée sur Go Maps ?

Comment puis-je garantir une itération ordonnée sur Go Maps ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-25 20:09:13840parcourir

How Can I Guarantee Ordered Iteration Over Go Maps?

Les cartes dans Go conservent l'ordre - mais pas comme vous pourriez le penser

Dans Go, les cartes sont des structures de données non triées. Cela signifie qu’il n’est pas garanti que l’ordre des paires clé-valeur dans une carte soit cohérent. Cela peut poser un problème lorsque vous devez parcourir une carte dans un ordre spécifique.

Considérez le code suivant :

package main

import (
    "fmt"
)

func main() {
    months := map[int]string{
        1:  "January",
        2:  "February",
        3:  "March",
        4:  "April",
        5:  "May",
        6:  "June",
        7:  "July",
        8:  "August",
        9:  "September",
        10: "October",
        11: "November",
        12: "December",
    }

    for index, month := range months {
        fmt.Println(index, "-", month)
    }
}

Lorsque vous exécutez ce code, vous pouvez vous attendre à ce que le résultat soit soyez les mois dans l'ordre de janvier à décembre. Cependant, ce n’est pas ce qui se passe. Au lieu de cela, vous verrez que les mois sont imprimés dans un ordre apparemment aléatoire.

Pourquoi cela se produit-il ?

La raison en est que les clés d'une carte Go sont stockées dans un format non trié. tableau. Lorsque vous parcourez une carte, les clés sont accessibles dans l'ordre dans lequel elles sont stockées dans le tableau.

Solution

Il existe différentes manières d'obtenir autour de cette question. Une solution consiste à utiliser un tableau pour stocker les clés dans l’ordre. Vous pouvez ensuite parcourir le tableau pour accéder aux éléments de la carte dans l'ordre souhaité.

Une autre façon de contourner ce problème consiste à utiliser une carte triée. Une carte triée est une carte qui garantit que les clés sont stockées dans un ordre trié. Cela peut être utile lorsque vous devez parcourir une carte dans un ordre spécifique.

Exemple

Le code suivant montre comment utiliser un tableau pour stocker les clés dans order :

package main

import (
    "fmt"
    "sort"
)

func main() {
    months := map[int]string{
        1:  "January",
        2:  "February",
        3:  "March",
        4:  "April",
        5:  "May",
        6:  "June",
        7:  "July",
        8:  "August",
        9:  "September",
        10: "October",
        11: "November",
        12: "December",
    }

    keys := []int{}
    for key := range months {
        keys = append(keys, key)
    }

    sort.Ints(keys)

    for _, key := range keys {
        fmt.Println(key, "-", months[key])
    }
}

Lorsque vous exécutez ce code, vous verrez que la sortie correspond aux mois dans l'ordre de janvier à décembre.

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