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.
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