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

Sheeraz Gul 2023年6月20日
  1. Copy メソッドを使用して Golang で 2つのマップをマージする
  2. 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.
著者: Sheeraz Gul
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

関連記事 - Go Map