Problema:
Fusionar varios mapas, conservando los valores asociados con la misma clave en todos los mapas.
Enfoque inicial:
El código proporcionado intenta fusionar mapas iterando sobre cada mapa, agregando valores al mapa resultante según las claves coincidentes. Sin embargo, este enfoque no maneja valores duplicados dentro del mapa de resultados.
Fusión simple:
Se puede implementar una función de fusión revisada para manejar duplicados agregando valores a los sectores asociado con claves en el 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
}
Evitar duplicados:
Para evitar duplicados en el mapa de resultados, la función de combinación se puede modificar para verificar los valores existentes antes de agregarlos:
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
}
Pruebas:
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)
Salida:
map[id_1:[val_1 val_3] id_2:[val_2]]
Esto demuestra la fusión de mapas, preservando los valores asociados a la misma clave y evitando duplicados.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3