Maison > Article > développement back-end > Comment puis-je garantir une itération ordonnée sur 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!