ホームページ >バックエンド開発 >Golang >オリジナルに影響を与えずに Go マップをディープコピーするにはどうすればよいですか?

オリジナルに影響を与えずに Go マップをディープコピーするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-25 16:18:11218ブラウズ

How to Deep Copy a Go Map Without Affecting the Original?

オリジナルを破損せずにマップをディープコピーする

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

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