Go Programming

Maîtriser l’itération des maps en Go

Spread the love

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

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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *