首页 >后端开发 >Golang >如何在 Golang 中合并多个映射并处理重复值?

如何在 Golang 中合并多个映射并处理重复值?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-29 09:37:30928浏览

How to Merge Multiple Maps in Golang and Handle Duplicate Values?

在 Golang 中合并地图

你的目标是合并多个地图,例如 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn