Heim >Backend-Entwicklung >Golang >Wie kann man eine Go-Map tief kopieren, ohne das Original zu beeinträchtigen?

Wie kann man eine Go-Map tief kopieren, ohne das Original zu beeinträchtigen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-25 16:18:11216Durchsuche

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

Tiefenkopieren einer Karte ohne Beschädigung des Originals

In Go wird versucht, eine Karte zu kopieren, indem eine Referenz wie aSuperMap[y] = zugewiesen wird aMap kann zu unbeabsichtigten Folgen führen. Um eine assoziative Karte zu erstellen, ohne das Original zu beeinträchtigen, ist ein tiefes Kopieren erforderlich.

Das Problem

Das bereitgestellte Beispiel versucht, den Inhalt einer Karte in eine SuperMap zu kopieren und dann zu löschen aMap. Durch das Löschen eines Eintrags aus aMap (delete(aMap, x)) wird jedoch auch seine Referenz aus aSuperMap entfernt. Dies führt dazu, dass die Supermap doppelte Daten enthält oder inkonsistent wird.

Lösung: Deep Copying

Um zu vermeiden, dass die Originalkarte beim Vornehmen von Änderungen an der Kopie verändert wird, ist Deep Copying sinnvoll gebraucht. In einer for-Schleife:

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

Jedes Schlüssel-Wert-Paar von originalMap wird einzeln in newMap kopiert. Durch diesen Vorgang wird eine neue und unabhängige Karte erstellt, die nicht mit dem Original verknüpft ist. Die ursprüngliche Karte kann dann gelöscht werden, ohne dass sich dies auf die Kopie auswirkt.

Beispiel

Das folgende Beispiel zeigt das tiefe Kopieren einer Karte:

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) // {}

In In diesem Beispiel ermöglicht Deep Copying die Änderung und Erweiterung von newMap unabhängig von originalMap, wodurch sichergestellt wird, dass die Integrität beider Maps gewahrt bleibt.

Das obige ist der detaillierte Inhalt vonWie kann man eine Go-Map tief kopieren, ohne das Original zu beeinträchtigen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn