Vérification simultanée de l'existence de clés dans plusieurs cartes
Question :
En Go, quand en vérifiant si la même clé existe dans plusieurs cartes, une approche consiste à utiliser l'indicateur ok dans une condition if, comme indiqué ci-dessous :
if v1, ok1 := map1["aaa"]; ok1 { ... } if v2, ok2 := map2["aaa"]; ok2 { ... }
Il est cependant souhaitable de condenser ces deux conditions en une seule. Cela peut-il être réalisé avec une seule instruction if ?
Réponse :
Malheureusement, il n'est pas possible d'effectuer des vérifications d'existence de clés dans plusieurs cartes en utilisant une seule condition if. La spécification du langage Go exige que les expressions d'index (telles que map1["aaa"]) dans les affectations ou initialisations de la forme v, ok := m[k] produisent une valeur booléenne non typée supplémentaire (ok).
Cela implique que la forme spéciale v, ok := m[k] ne peut être utilisée que lorsque rien d'autre n'est assigné. Cependant, il existe une approche alternative si le type de valeur des cartes est un type d’interface et que la valeur nil n’est pas utilisée. Dans ce cas, vous pouvez utiliser une simple affectation de tuple :
if v1, v2 := m1["aaa"], m2["aaa"]; v1 != nil && v2 != nil { fmt.Printf("Both maps contain key '%s': %v, %v\n", "aaa", v1, v2) }
Pour simplifier davantage ce processus, vous pouvez créer une fonction d'assistance qui effectue la vérification des clés et renvoie les valeurs et les indicateurs ok pour les deux cartes :
func idx(m1, m2 map[string]interface{}, k string) ( v1, v2 interface{}, ok1, ok2 bool) { v1, ok1 = m1[k] v2, ok2 = m2[k] return }
Ensuite, vous pouvez utiliser cette fonction pour effectuer une vérification en une seule étape :
if v1, v2, ok1, ok2 := idx(m1, m2, "aaa"); ok1 && ok2 { fmt.Printf("Both maps contain key '%s': %v, %v\n", "aaa", v1, v2) }
En utilisant ces techniques, vous pouvez vérifier efficacement l'existence de clés dans plusieurs cartes dans Go.
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!