ホームページ >バックエンド開発 >Golang >Go でマップをディープコピーしてクリアするにはどうすればよいですか?

Go でマップをディープコピーしてクリアするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-29 17:46:11319ブラウズ

How to Deep Copy and Clear Maps in Go?

Go でのマップのディープ コピーとクリア

連想データ構造を操作する場合、多くの場合、マップのディープ コピーを作成し、その後、元の値をクリアして新しい値を受け入れます。ただし、Go では、参照をマップに割り当てるだけではディープ コピーは作成されず、元のマップのクリアに関する問題が発生します。

問題

次のコード:

for something := range fruits {
    aMap := make(map[string]aStruct)
    aSuperMap := make(map[string]map[string]aStruct)

    for x := range something {
        aMap[x] = aData
        aSuperMap[y] = aMap
        delete(aMap, x)
    }

    // Save aSuperMap
}

このコードでは、aMap のディープ コピーを aSuperMap に作成してクリアしようとします。 aMap が新しい値を取得できるようにします。ただし、aMap から要素を削除すると、両方のマップが同じ基になるデータを参照しているため、aSuperMap からも要素が削除されます。

解決策

要素の真のディープ コピーを作成するにはGo でマップを使用する場合、for ループを使用して、各キーと値のペアを元のマップから新しいマップに手動でコピーする必要があります。 map:

for k, v := range originalMap {
    newMap[k] = v
}

これにより、元のマップoriginalMapから独立した新しいマップnewMapが作成されます。

元のマップのクリア

マップのディープコピーを作成した後、組み込みの len() を使用して元のマップをクリアできますfunction:

length := len(aMap)
for i := 0; i < length; i++ {
    for key := range aMap {
        delete(aMap, key)
    }
}

これにより、aSuperMap の内容はそのままで、aMap からすべての要素が削除されます。

以上がGo でマップをディープコピーしてクリアするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。