問題:
複数のマップをマージし、マップ全体で同じキーに関連付けられた値を保持します。
初期アプローチ:
提供されたコードは、反復処理によってマップをマージしようとします。各マップに対して、一致するキーに基づいて結果マップに値を追加します。ただし、このアプローチでは結果マップ内の重複値は処理されません。
単純なマージ:
スライスに値を追加することで重複を処理するように改訂されたマージ関数を実装できます。結果マップのキーに関連付けられています。
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
}
重複の回避:
結果マップの重複を避けるために、追加する前に既存の値をチェックするようにマージ関数を変更できます:
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
}
テスト:
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)
Output:
map[id_1:[val_1 val_3] id_2:[val_2]]
これはマージを示していますマップの同じキーに関連付けられた値を保持し、重複を回避します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3