1361 votes

Comment tester l'existence d'une clé dans une carte?

Je sais que je peux parcourir une carte par,

 for k, v := range m { ... }
 

et cherchez une clé, mais existe-t-il un moyen plus efficace de tester l'existence d'une clé sur une carte? Merci. Je n'ai pas trouvé de réponse dans les spécifications de la langue .

2605voto

marketer Points 3938

Une réponse en ligne:

 if val,ok := dict["foo"]; ok {
    //do something here
}
 

204voto

peterSO Points 25725

En plus de La Programmation Go Spécification de Langage, vous devriez lire Efficace d'Aller. Dans la section sur les cartes, disent-ils, entre autres choses:

"Une tentative de récupération d'une valeur de carte avec une clé qui n'est pas présent dans la carte sera la cause de la panne du programme, mais il y a un moyen de le faire en toute sécurité à l'aide d'une affectation multiple."

var seconds int
var ok bool
seconds, ok = timeZone[tz]

"Pour tester la présence de la carte sans se soucier de la valeur réelle, vous pouvez utiliser le vide identifiant, d'un simple trait de soulignement (_). Le vide identifiant peut être affecté ou déclarée avec n'importe quelle valeur de n'importe quel type, avec la valeur de rebut sans danger. Pour le test de présence dans une carte, utiliser le vide identifiant à la place de l'habituel variable pour la valeur."

_, present := timeZone[tz]

114voto

grokus Points 1818

Recherché sur la liste d'email de go-nuts et trouvé une solution postée par Peter Froehlich le 15/11/2009.

 package main

import "fmt"

func main() {
        dict := map[string]int {"foo" : 1, "bar" : 2}
        value, ok := dict["baz"]
        if ok {
                fmt.Println("value: ", value)
        } else {
                fmt.Println("key not found")
        }
}
 

Ou, plus compact,

 if value, ok := dict["baz"]; ok {
    fmt.Println("value: ", value)
} else {
    fmt.Println("key not found")
}
 

Notez, en utilisant cette forme de if déclaration, le value et ok dans les variables ne sont visibles que if conditions.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X