重複する値を避けながら Golang で複数のマップをマージするにはどうすればよいですか?

Susan Sarandon
リリース: 2024-10-27 15:39:02
オリジナル
834 人が閲覧しました

How to Merge Multiple Maps in Golang While Avoiding Duplicate Values?

Golang でのマップのマージ

問題:
マップ間で同じキーに関連付けられた値を保持しながら、複数のマップをマージします。

最初のアプローチ:

提供されたコードは、各マップを反復処理し、一致するキーに基づいて結果マップに値を追加することによってマップをマージしようとします。ただし、このアプローチでは結果マップ内の重複値は処理されません。

単純なマージ:

値をスライスに追加することで重複を処理するように改訂されたマージ関数を実装できます。

<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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!