"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo fusionar mapas en Golang y evitar valores duplicados?

¿Cómo fusionar mapas en Golang y evitar valores duplicados?

Publicado el 2024-11-14
Navegar:782

How to merge maps in Golang and avoid duplicate values?

Fusionar mapas en Golang

Combinar varios mapas en un solo mapa fusionado en Golang es una tarea común. Supongamos que tiene tres mapas:

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

El objetivo es fusionar estos mapas según la clave de identificación, lo que da como resultado:

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

Fusión simple

Para fusionar los mapas, puede iterar sobre cada mapa de entrada y agregar los valores asociados con cada clave a un segmento 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

En algunos casos, es posible que desee evitar valores duplicados en el mapa combinado. Para lograr esto, verifique si hay duplicados antes de agregar.

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
}

Ejemplo 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)

Salida:

map[id_1:[val_1 val_3] id_2:[val_2]]
Último tutorial Más>

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