你的目標是合併多個地圖,例如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中文網其他相關文章!