Home >Backend Development >Golang >How to Merge Maps in Golang and Handle Duplicate Values?

How to Merge Maps in Golang and Handle Duplicate Values?

Linda Hamilton
Linda HamiltonOriginal
2024-10-29 07:10:03992browse

How to Merge Maps in Golang and Handle Duplicate Values?

Merge Maps in Golang

Merging Maps

Merging multiple maps with the same key type into a single map requires merging their values for matching keys. In Golang, map values can be any type, including slices.

Custom Merge Function

A simple approach to merge maps is to create a function that iterates over the input maps and appends values to a slice for matching keys in the result map.

<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>

Avoiding Duplicates

If duplicate values for the same key should be avoided, the merge function can be extended with a check before appending:

<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>

Example Usage

Consider the following maps:

<code class="go">m1 := map[string]string{"id_1": "val_1"}
m2 := map[string]string{"id_2": "val_2"}
m3 := map[string]string{"id_1": "val_3"}</code>

Using the merge function to merge them produces the following result map:

<code class="go">res := merge(m1, m2, m3)
fmt.Println(res)</code>

Output:

map[id_1:[val_1 val_3] id_2:[val_2]]

The above is the detailed content of How to Merge Maps in Golang and Handle Duplicate Values?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn