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

Comment puis-je vérifier efficacement l'existence d'une clé sur plusieurs cartes Go dans une seule condition ?

Barbara Streisand
Libérer: 2025-01-06 00:22:39
original
975 Les gens l'ont consulté

How Can I Efficiently Check for Key Existence Across Multiple Go Maps in a Single Condition?

Détermination de l'existence d'une clé sur plusieurs cartes

Lorsque vous travaillez avec plusieurs cartes, il est souvent nécessaire de vérifier si une clé spécifique existe dans toutes eux. Bien que l'approche suivante soit courante :

if v1, ok1 := map1["aaa"]; ok1 {
    ...
}
if v2, ok2 := map2["aaa"]; ok2 {
    ...
}
Copier après la connexion

elle implique plusieurs instructions if. Existe-t-il une manière plus concise d'effectuer cette vérification dans une condition ?

Tentatives de syntaxe de condensation

Une solution possible consiste à évaluer l'existence de la clé dans les deux cartes, puis vérifier leur intersection :

v1, ok1 := map1["aaa"]
v2, ok2 := map2["aaa"]
if ok1 && ok2 {
    ...
}
Copier après la connexion

Cependant, cette approche nécessite d'attribuer et de vérifier deux étapes.

Limitations des vérifications de clés à condition unique

Il s'avère que le langage Go ne permet pas de vérifier l'existence de plusieurs clés dans une seule condition if. Selon la spécification Go, une expression d'index sur une carte génère une valeur booléenne supplémentaire indiquant la présence ou l'absence de la clé. Cette syntaxe spéciale ne peut être utilisée que lors d'une affectation ou d'une initialisation.

Par conséquent, il n'est pas possible d'effectuer une vérification combinée de l'existence d'une clé en utilisant uniquement la forme spéciale v, ok := m[k].

Alternatives pour les contrôles d'existence des clés

Si le type de valeur de la carte est un type d'interface et peut être garanti qu'il n'a pas de valeur nulle valeur, une approche alternative consiste à utiliser l'affectation de tuples pour vérifier l'existence de la clé :

if v1, v2 := m1["aaa"], m2["aaa"]; v1 != nil && v2 != nil {
    ...
}
Copier après la connexion

Pour les cas plus complexes, une fonction d'assistance peut être créée pour encapsuler la logique de vérification de l'existence de la clé :

func idx(m1, m2 map[string]interface{}, k string) (
    v1, v2 interface{}, ok1, ok2 bool) {

    v1, ok1 = m1[k]
    v2, ok2 = m2[k]
    return
}

// Usage example:
if v1, v2, ok1, ok2 := idx(m1, m2, "aaa"); ok1 && ok2 {
    ...
}
Copier après la connexion

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