Maison >développement back-end >Golang >Comment puis-je vérifier efficacement l'existence d'une clé dans plusieurs cartes Go simultanément ?

Comment puis-je vérifier efficacement l'existence d'une clé dans plusieurs cartes Go simultanément ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-13 02:08:09292parcourir

How Can I Efficiently Check for the Existence of a Key in Multiple Go Maps Simultaneously?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn