Les maps de Go sont une structure de données fondamentale pour stocker des paires clé-valeur. Itérer efficacement à travers ces paires est crucial pour de nombreuses applications. Cet article fournit un guide complet pour travailler avec les maps, de la création au parcours, en mettant l’accent sur les meilleures pratiques et les pièges courants.
Table des matières
- Déclaration et initialisation des maps
- Itération sur les maps
- Itération sur les clés et les valeurs sélectivement
- Maintenir l’ordre pendant l’itération
Déclaration et initialisation des maps
Les maps Go sont déclarées à l’aide de la fonction make()
ou d’un littéral composite. make()
permet de spécifier une capacité initiale, améliorant les performances pour les grandes maps. Les littéraux composites sont plus concis pour les maps plus petites, définies statiquement.
package main
import "fmt"
func main() {
// Utilisation de make()
myMap := make(map[string]int, 10) // Capacité initiale de 10
myMap["apple"] = 1
myMap["banana"] = 2
myMap["cherry"] = 3
// Utilisation d'un littéral composite
anotherMap := map[string]int{
"apple": 1,
"banana": 2,
"cherry": 3,
}
fmt.Println("myMap:", myMap)
fmt.Println("anotherMap:", anotherMap)
}
Itération sur les maps
La manière standard d’itérer sur une map Go est d’utiliser une boucle for...range
. Il est important de noter que l’ordre d’itération n’est pas garanti et peut varier entre les exécutions. Ne vous fiez pas à un ordre spécifique pour votre logique de programme.
package main
import "fmt"
func main() {
myMap := map[string]int{
"apple": 1,
"banana": 2,
"cherry": 3,
}
for key, value := range myMap {
fmt.Printf("Clé: %s, Valeur: %dn", key, value)
}
}
Itération sur les clés et les valeurs sélectivement
Vous pouvez choisir d’itérer uniquement sur les clés ou les valeurs si nécessaire, en utilisant l’identificateur vide _
pour ignorer l’élément non souhaité :
// Itération sur les clés uniquement
for key := range myMap {
fmt.Println("Clé:", key)
}
// Itération sur les valeurs uniquement
for _, value := range myMap {
fmt.Println("Valeur:", value)
}
Maintenir l’ordre pendant l’itération
Si un ordre d’itération spécifique est requis, vous devez utiliser une structure de données triée. Une approche consiste à utiliser une tranche de clés, à la trier, puis à itérer à travers la tranche, en accédant aux valeurs correspondantes à partir de la map :
package main
import (
"fmt"
"sort"
)
func main() {
myMap := map[string]int{
"apple": 1,
"banana": 2,
"cherry": 3,
}
keys := make([]string, 0, len(myMap))
for k := range myMap {
keys = append(keys, k)
}
sort.Strings(keys)
for _, k := range keys {
fmt.Printf("Clé: %s, Valeur: %dn", k, myMap[k])
}
}