首頁 >後端開發 >Golang >如何在 Golang 中合併多個映射並處理重複值?

如何在 Golang 中合併多個映射並處理重複值?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-29 09:37:30916瀏覽

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