問題:
マップ間で同じキーに関連付けられた値を保持しながら、複数のマップをマージします。
最初のアプローチ:
提供されたコードは、各マップを反復処理し、一致するキーに基づいて結果マップに値を追加することによってマップをマージしようとします。ただし、このアプローチでは結果マップ内の重複値は処理されません。
単純なマージ:
値をスライスに追加することで重複を処理するように改訂されたマージ関数を実装できます。
<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>
重複の回避:
結果マップ内の重複を避けるために、マージ関数を変更して既存のキーをチェックすることができます。追加前の値:
<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 { // Check if (k,v) was added before: for _, v2 := range res[k] { if v == v2 { continue srcMap } } res[k] = append(res[k], v) } } return res }</code>
テスト:
<code class="go">m1 := map[string]string{"id_1": "val_1"} m2 := map[string]string{"id_2": "val_2", "id_1": "val_1"} m3 := map[string]string{"id_1": "val_3"} res := merge(m1, m2, m3) fmt.Println(res)</code>
出力:
map[id_1:[val_1 val_3] id_2:[val_2]]
これは、マップのマージ、同じキーに関連付けられた値の保持、重複の回避。
以上が重複する値を避けながら Golang で複数のマップをマージするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。