문제:
여러 지도를 병합하여 지도 전체에서 동일한 키와 연결된 값을 유지합니다.
초기 접근 방식:
제공된 코드는 각 맵을 반복하고 일치하는 키를 기반으로 결과 맵에 값을 추가하여 맵을 병합하려고 시도합니다. 그러나 이 접근 방식은 결과 맵 내의 중복 값을 처리하지 않습니다.
단순 병합:
수정된 병합 함수를 구현하여 조각에 값을 추가하여 중복을 처리할 수 있습니다. 결과 맵의 키와 연결됩니다.
func merge(ms ...map[string]string) map[string][]string {
res := map[string][]string{}
for _, m := range ms {
for k, v := range m {
res[k] = append(res[k], v)
}
}
return res
}
중복 방지:
결과 맵에서 중복을 방지하려면 추가하기 전에 기존 값을 확인하도록 병합 기능을 수정할 수 있습니다.
func merge(ms ...map[string]string) map[string][]string {
res := map[string][]string{}
for _, m := range ms {
srcMap:
for k, v := range m {
// Check if (k,v) was added before:
for _, v2 := range res[k] {
if v == v2 {
continue srcMap
}
}
res[k] = append(res[k], v)
}
}
return res
}
테스트:
m1 := map[string]string{"id_1": "val_1"}
m2 := map[string]string{"id_2": "val_2", "id_1": "val_1"}
m3 := map[string]string{"id_1": "val_3"}
res := merge(m1, m2, m3)
fmt.Println(res)
출력:
map[id_1:[val_1 val_3] id_2:[val_2]]
이는 병합을 보여줍니다. 동일한 키와 관련된 값을 보존하고 중복을 방지합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3