オリジナルを破損せずにマップをディープコピーする
Go では、aSuperMap[y] = のような参照を割り当ててマップをコピーしようとします。 aMap は予期せぬ結果を引き起こす可能性があります。オリジナルに影響を与えずに連想マップを作成するには、ディープコピーが必要です。
問題
提供された例では、aMap の内容を aSuperMap にコピーしてクリアしようとしています。地図。ただし、aMap からエントリを削除すると (delete(aMap, x))、その参照も aSuperMap から削除されます。この結果、スーパーマップに重複データが含まれるか、不整合が生じます。
解決策: ディープ コピー
コピーに変更を加えるときに元のマップが変更されるのを避けるには、ディープ コピーを使用します。使用済み。 for ループ内:
for k, v := range originalMap { newMap[k] = v }
originalMap の各キーと値のペアが個別に newMap にコピーされます。このプロセスでは、元のマップにリンクされていない、新しい独立したマップが作成されます。元のマップは、コピーに影響を与えることなくクリアできます。
例
次の例は、マップのディープ コピーを示しています。
originalMap := map[string]int{"one": 1, "two": 2} // Deep copy originalMap into newMap newMap := make(map[string]int) for k, v := range originalMap { newMap[k] = v } // Clear the original map originalMap = make(map[string]int) // Verify that newMap is independent of originalMap newMap["three"] = 3 fmt.Println(newMap) // {one: 1, two: 2, three: 3} fmt.Println(originalMap) // {}
この例では、ディープ コピーにより、newMap をoriginalMap とは独立して変更および拡張できるため、両方のマップの整合性が確実に維持されます。
以上がオリジナルに影響を与えずに Go マップをディープコピーするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。