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
Libérer: 2024-12-13 02:08:09
original
289 Les gens l'ont consulté

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 {
    ...
}
Copier après la connexion

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)
}
Copier après la connexion

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
}
Copier après la connexion

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)
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal