"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 mapas em Golang e evitar valores duplicados?

Como mesclar mapas em Golang e evitar valores duplicados?

Publicado em 2024-11-14
Navegar:626

How to merge maps in Golang and avoid duplicate values?

Mesclando mapas em Golang

Combinar vários mapas em um único mapa mesclado em Golang é uma tarefa comum. Suponha que você tenha três mapas:

  • map1 = {"id": "id_1", "val": "val_1"}
  • map2 = {"id": "id_2" , "val": "val_2"}
  • map3 = {"id": "id_1", "val": "val_3"}

O objetivo é mesclar esses mapas com base na chave de identificação, resultando em:

  • result_map = {"id": "id_1", " val": {"val_1", "val_3"}, "id": "id_2", var: {"val_2"}}

Simples Mesclar

Para mesclar os mapas, você pode iterar sobre cada mapa de entrada e anexar os valores associados a cada chave a uma fatia 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 duplicações

Em alguns casos, você pode querer evitar valores duplicados no mapa mesclado. Para conseguir isso, verifique se há duplicatas 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
}

Exemplo de uso

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)

Saída:

map[id_1:[val_1 val_3] id_2:[val_2]]
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