Dans GO, itérer sur une carte se fait en utilisant le mot clé de range
dans une boucle for
boucle. Cela vous permet d'accéder à la fois à la clé et à la valeur de chaque entrée dans la carte. La syntaxe de base pour itération sur une carte ressemble à ceci:
<code class="go">myMap := map[string]int{"one": 1, "two": 2, "three": 3} for key, value := range myMap { fmt.Printf("Key: %s, Value: %d\n", key, value) }</code>
Ce code imprimera chaque paire de valeurs de clé dans la carte. L'ordre d'itération sur une carte dans GO n'est pas garanti d'être le même à chaque fois que vous itérez, car les cartes sont intrinsèquement non ordonnées.
La syntaxe pour l'utilisation range
avec des cartes dans GO dans une boucle for
boucle est la suivante:
<code class="go">for key, value := range mapVariable { // Code to process each key-value pair }</code>
Ici, mapVariable
est votre carte, key
conservera la clé de l'entrée actuelle et value
conservera la valeur associée. Vous pouvez choisir d'ignorer la clé ou la valeur que si vous n'êtes intéressé que par l'un d'eux. Par exemple, pour ne réaliser que les clés:
<code class="go">for key := range mapVariable { // Code to process each key }</code>
Ou pour ne faire que parvenir sur les valeurs:
<code class="go">for _, value := range mapVariable { // Code to process each value }</code>
La modification d'une carte tout en itérant dessus peut être délicate car la modification directe des entrées de la carte peut conduire à un comportement ou à des paniques inattendu, surtout si vous essayez de supprimer les entrées. Cependant, vous pouvez modifier une carte en toute sécurité tout en itérant dessus en suivant ces pratiques:
Suppression des entrées: Vous pouvez supprimer en toute sécurité les entrées d'une carte pendant l'itération en utilisant une tranche séparée pour collecter les clés qui devraient être supprimées, puis en itérant sur la tranche pour les supprimer après la boucle d'itération principale:
<code class="go">myMap := map[string]int{"one": 1, "two": 2, "three": 3} keysToDelete := []string{} for key, value := range myMap { if value == 2 { keysToDelete = append(keysToDelete, key) } } for _, key := range keysToDelete { delete(myMap, key) }</code>
Modification des valeurs: vous pouvez modifier directement les valeurs des entrées de carte pendant l'itération sans aucun problème:
<code class="go">for key, value := range myMap { myMap[key] = value * 2 // Doubling the value }</code>
Lorsque vous traitez avec de grandes cartes en Go, il existe plusieurs considérations de performance à garder à l'esprit:
sync.Map
peut être utilisé pour un accès simultané, mais il est livré avec son propre ensemble de compromis de performance.Pour optimiser les performances lorsque vous travaillez avec de grandes cartes, considérez:
sync.Map
si vous avez besoin d'un accès à filetage.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!