You aim to combine multiple maps, such as map1 = [id: id_1, val: val_1], map2 = [id: id_2, val: val_2], and map3 = [id: id_1, val: val_3], into a single result map. Key-based merging is required, resulting in a result map like this:
result_map = [id: id_1 val: {val_1, val_3}, id: id_2 var: {val_2}]
You can merge maps without issue. However, since the result map can contain multiple values for the same key, it's wise to use a slice as the value type, e.g., map[string][]string.
Merge operation involves iterating over the maps to be merged, then appending values from source maps to slices associated with the same key in the result map. Remember to reassign the extended slices back to the result map's keys.
Here's a basic approach:
<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>
The aforementioned merge() method allows duplicate entries. For instance, if "id_1": "val_1" appears in multiple input maps, it will be repeated in the target map, e.g., "id_1": ["val_1", "val_1", "val_x"]. To eliminate duplicates and ensure "id_1": "val_1" appears only once, an additional check is required:
<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>
The above is the detailed content of How to Merge Multiple Maps in Golang and Handle Duplicate Values?. For more information, please follow other related articles on the PHP Chinese website!