Combinar dos mapas en Golang

Sheeraz Gul 20 junio 2023
  1. Use el método Copiar para fusionar dos mapas en Golang
  2. Método definido por el usuario para fusionar dos mapas en Golang
Combinar dos mapas en Golang

Este tutorial demuestra cómo fusionar dos mapas en Golang.

Golang no proporciona ninguna funcionalidad integrada para fusionar los mapas, pero esto se puede lograr utilizando el método Copiar o siguiendo el proceso correspondiente. Probemos ambos métodos.

Use el método Copiar para fusionar dos mapas en Golang

Al usar el método Copiar, podemos copiar el contenido de un mapa a otro mapa mediante el cual podemos lograr la funcionalidad de combinación para mapas. El método Copiar se introdujo en la versión 1.18 de Golang.

El método Copiar toma dos parámetros, que son mapas. El contenido del segundo mapa se copiará en el primer mapa.

Probemos un ejemplo:

package main

import (
    "fmt"

    "golang.org/x/exp/maps"
)

func main() {
    map1 := map[string]int{
        "DelftstackOne":   10,
        "DelftstackTwo":   20,
        "DelftstackThree": 30,
    }
    map2 := map[string]int{
        "DelftstackTwo":   20,
        "DelftstackThree": 30,
        "DelftstackFour":  40,
        "DelftstackFive":  50,
    }
    // Print the map before merging
    fmt.Println("The First Map: ", map1)
    fmt.Println("The Second Map: ", map2)

    maps.Copy(map1, map2)
    fmt.Println("The merged Map is: ", map1)
}

El código anterior fusionará dos mapas basados en la unión utilizando el método Copiar. La única desventaja del método Copiar es que modifica nuestro primer mapa.

Ver la salida:

The First Map:  map[DelftstackOne:10 DelftstackThree:30 DelftstackTwo:20]
The Second Map:  map[DelftstackFive:50 DelftstackFour:40 DelftstackThree:30 DelftstackTwo:20]
The merged Map is:  map[DelftstackFive:50 DelftstackFour:40 DelftstackOne:10 DelftstackThree:30 DelftstackTwo:20]

Program exited.

Método definido por el usuario para fusionar dos mapas en Golang

Podemos diseñar un método que combine dos mapas basados en una unión, lo que excluirá la entrada con el mismo valor. Aquí hay un ejemplo:

package main

import     "fmt"

type Delftstack struct {
    Id     int
    Name   string
    Salary int
}

type EmployeeMaps map[int]Delftstack

func MapUnion(map1, map2 EmployeeMaps) EmployeeMaps {
    for x, y := range map1 {
        if m, n := map2[x]; n {
            y.Salary += m.Salary
        }
        map2[x] = y

    }
    return map2
}

func main() {
    map1 := EmployeeMaps{2: {30, "Jack", 2000}, 5: {50, "Samuel", 1500}, 6: {60, "John", 1800}}
    map2 := EmployeeMaps{1: {10, "Pamela", 3000}, 2: {20, "Connor", 2000}, 3: {30, "Jack", 2000}, 4: {40, "Joe", 4000}}
    result := MapUnion(map2, map1)
    fmt.Println(result)

}

El código anterior fusiona dos mapas al excluir la entrada con el mismo valor, básicamente la unión de mapas. El código primero crea una estructura y mapas con claves int y valores de estructura; luego, utiliza el método definido por el usuario MapUnion para fusionarlos en función de su unión de valores.

Ver la salida:

map[1:{10 Pamela 3000} 2:{20 Connor 4000} 3:{30 Jack 2000} 4:{40 Joe 4000} 5:{50 Samuel 1500} 6:{60 John 1800}]

Program exited.
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

Artículo relacionado - Go Map