"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso verificar com eficiência a existência de chaves em vários mapas Go?

Como posso verificar com eficiência a existência de chaves em vários mapas Go?

Publicado em 2024-12-22
Navegar:365

How Can I Efficiently Check for Key Existence Across Multiple Go Maps?

Verificação eficiente da existência de chaves em vários mapas

No Go, é comum trabalhar com mapas, que são estruturas de dados eficientes para recuperar chaves pares de valores. No entanto, o código fornecido pelo desenvolvedor demonstra a necessidade de verificar a existência de uma chave em dois mapas separados. A questão permanece se esse processo pode ser mais conciso.

Conforme explicado na resposta, o uso do formulário especial v, ok := m[k] em Go para verificar a existência da chave é limitado a atribuições de variável única . Portanto, combinar as duas verificações em uma condição if usando este formulário não é viável.

No entanto, existem abordagens alternativas para alcançar a funcionalidade desejada:

  1. Atribuição de tupla:
    Se o tipo de valor do mapa for um tipo de interface e você puder garantir que o valor nulo não seja usado, você pode realizar a atribuição de tupla usando dois índices expressões:

    if v1, v2 := m1["aaa"], m2["aaa"]; v1 != nil && v2 != nil {
        // ...
    }
  2. Função auxiliar:
    Uma função auxiliar pode ser criada para realizar a verificação de existência de chave em ambos os mapas e retornar os resultados:

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

    Esta função pode então ser usada da seguinte forma:

    if v1, v2, ok1, ok2 := idx(m1, m2, "aaa"); ok1 && ok2 {
        // ...
    }

Essas abordagens permitem uma verificação concisa e eficiente da existência de uma chave em vários mapas dentro de uma única instrução condicional.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3