你的目标是合并多个地图,例如 map1 = [id: id_1, val: val_1], map2 = [id: id_2, val: val_2] 和 map3 = [id: id_1, val: val_3] 到单个结果映射中。需要基于键的合并,得到如下结果映射:
result_map = [id: id_1 val: {val_1, val_3}, id: id_2 var: {val_2}]
您可以毫无问题地合并地图。但是,由于结果映射可以包含同一键的多个值,因此明智的做法是使用切片作为值类型,例如,map[string][]string。
合并操作涉及迭代映射以进行合并,然后将源映射中的值附加到与结果映射中相同键关联的切片。请记住将扩展切片重新分配回结果映射的键。
这是一个基本方法:
<code class="go">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 }</code>
前面提到的 merge() 方法允许重复条目。例如,如果“id_1”:“val_1”出现在多个输入映射中,则它将在目标映射中重复,例如“id_1”:[“val_1”,“val_1”,“val_x”]。为了消除重复并确保 "id_1": "val_1" 仅出现一次,需要进行额外检查:
<code class="go">func merge(ms ...map[string]string) map[string][]string { res := map[string][]string{} for _, m := range ms { srcMap: for k, v := range m { for _, v2 := range res[k] { if v == v2 { continue srcMap } } res[k] = append(res[k], v) } } return res }</code>
以上是如何在 Golang 中合并多个映射并处理重复值?的详细内容。更多信息请关注PHP中文网其他相关文章!