"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 mesclar vários mapas em Golang evitando valores duplicados?

Como mesclar vários mapas em Golang evitando valores duplicados?

Publicado em 2024-11-08
Navegar:826

How to Merge Multiple Maps in Golang While Avoiding Duplicate Values?

Mesclando mapas em Golang

Problema:
Mesclar vários mapas, preservando valores associados à mesma chave em todos os mapas.

Abordagem inicial:

O código fornecido tenta mesclar mapas iterando sobre cada mapa, adicionando valores ao mapa de resultados com base nas chaves correspondentes. No entanto, essa abordagem não lida com valores duplicados no mapa de resultados.

Mesclagem simples:

Uma função de mesclagem revisada pode ser implementada para lidar com duplicatas anexando valores às fatias associado às chaves no mapa de resultados.

func merge(ms ...map[string]string) map[string][]string {
    res := map[string][]string{}
    for _, m := range ms {
        for k, v := range m {
            res[k] = append(res[k], v)
        }
    }
    return res
}

Evitando duplicatas:

Para evitar duplicatas no mapa de resultados, a função de mesclagem pode ser modificada para verificar os valores existentes antes de anexar:

func merge(ms ...map[string]string) map[string][]string {
    res := map[string][]string{}
    for _, m := range ms {
    srcMap:
        for k, v := range m {
            // Check if (k,v) was added before:
            for _, v2 := range res[k] {
                if v == v2 {
                    continue srcMap
                }
            }
            res[k] = append(res[k], v)
        }
    }
    return res
}

Teste:

m1 := map[string]string{"id_1": "val_1"}
m2 := map[string]string{"id_2": "val_2", "id_1": "val_1"}
m3 := map[string]string{"id_1": "val_3"}

res := merge(m1, m2, m3)
fmt.Println(res)

Output:

map[id_1:[val_1 val_3] id_2:[val_2]]

Isso demonstra a fusão de mapas, preservando valores associados à mesma chave e evitando duplicatas.

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