问题:
合并多个映射,保留与跨映射中的相同键关联的值。
初始方法:
提供的代码尝试通过迭代每个映射来合并映射,根据匹配键将值添加到结果映射。但是,此方法不处理结果映射中的重复值。
简单合并:
可以通过将值附加到切片来实现修改后的合并函数来处理重复项与结果映射中的键关联。
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