HOWTO · Go
Golang에서 두 개의 지도 병합
이 튜토리얼은 Golang에서 두 개의 맵을 병합하는 방법을 보여줍니다.
이 튜토리얼은 Golang에서 두 개의 맵을 병합하는 방법을 보여줍니다.
Golang은 지도를 병합하는 내장 기능을 제공하지 않지만 copy 방법을 사용하거나 해당 프로세스를 따라 수행할 수 있습니다. 두 가지 방법을 모두 시도해 봅시다.
copy 방법을 사용하여 Golang에서 두 개의 지도 병합
copy 방법을 사용하여 지도의 병합 기능을 수행할 수 있는 한 지도의 내용을 다른 지도로 복사할 수 있습니다. copy 방법은 Golang 1.18 버전에서 도입되었습니다.
copy 방법은 맵인 두 개의 매개변수를 사용합니다. 두 번째 맵의 콘텐츠가 첫 번째 맵에 복사됩니다.
예를 들어 보겠습니다.
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 방법을 사용하여 합집합을 기반으로 두 개의 맵을 병합합니다. 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에서 두 개의 맵을 병합하는 사용자 정의 방법
동일한 값을 가진 항목을 제외하는 통합을 기반으로 두 맵을 병합하는 방법을 설계할 수 있습니다. 다음은 예입니다.
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)
}
위의 코드는 기본적으로 맵의 합집합인 동일한 값을 가진 항목을 제외하여 두 개의 맵을 병합합니다. 코드는 먼저 구조체를 만들고 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.