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.