HOWTO · Go

Golang で 2つのマップをマージする

このチュートリアルでは、Golang で 2つのマップをマージする方法を示します。

このページの内容

このチュートリアルでは、Golang で 2つのマップをマージする方法を示します。

Golang には、マップをマージする組み込み機能はありませんが、これは Copy メソッドを使用するか、対応するプロセスに従って行うことができます。 両方の方法を試してみましょう。

Copy メソッドを使用して Golang で 2つのマップをマージする

Copy メソッドを使用すると、あるマップのコンテンツを別のマップにコピーして、マップのマージ機能を実現できます。 Copy メソッドは Golang 1.18 バージョンで導入されました。

Copy メソッドは、マップである 2つのパラメーターを取ります。 2 番目のマップのコンテンツが最初のマップにコピーされます。

例を試してみましょう:

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

上記のコードは、Copy メソッドを使用してユニオンに基づいて 2つのマップをマージします。 Copy メソッドの唯一の欠点は、最初のマップを変更することです。

出力を参照してください。

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.

Golang で 2つのマップをマージするユーザー定義の方法

ユニオンに基づいて 2つのマップをマージするメソッドを設計できます。これにより、同じ値を持つエントリが除外されます。 以下に例を示します。

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)

}

上記のコードは、同じ値を持つエントリを除外することで 2つのマップをマージします。基本的には、マップの結合です。 コードは最初に構造体を作成し、int キーと構造体値でマップします。 次に、ユーザー定義メソッド MapUnion を使用して、値の結合に基づいてそれらをマージします。

出力を参照してください。

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.