Heim >Backend-Entwicklung >Golang >Wie kann ich Karten in Go tief kopieren und löschen?
Tiefenkopieren und Löschen von Karten in Go
Bei der Arbeit mit assoziativen Datenstrukturen ist es oft notwendig, eine Tiefenkopie einer Karte zu erstellen und Löschen Sie dann das Original, um neue Werte zu akzeptieren. In Go wird jedoch durch einfaches Zuweisen der Referenz zu einer Karte keine tiefe Kopie erstellt, was zu Problemen beim Löschen der Originalkarte führt.
Das Problem
Bedenken Sie Folgendes Folgender Code:
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 }
In diesem Code versuchen wir, eine tiefe Kopie von aMap in aSuperMap zu erstellen und aMap dann zu löschen, damit dies möglich ist neue Werte annehmen. Durch das Löschen eines Elements aus aMap wird es jedoch auch aus aSuperMap gelöscht, da beide Karten auf dieselben zugrunde liegenden Daten verweisen.
Die Lösung
Um eine wirklich tiefe Kopie von a zu erstellen Um eine Map in Go zu erstellen, muss eine for-Schleife verwendet werden, um jedes Schlüssel-Wert-Paar manuell von der ursprünglichen Map in die neue zu kopieren Karte:
for k, v := range originalMap { newMap[k] = v }
Dadurch wird eine neue Karte, newMap, erstellt, die unabhängig von der Originalkarte, originalMap, ist.
Löschen der Originalkarte
Nachdem eine tiefe Kopie der Karte erstellt wurde, kann die Originalkarte mit der integrierten Funktion len() gelöscht werden. Funktion:
length := len(aMap) for i := 0; i < length; i++ { for key := range aMap { delete(aMap, key) } }
Dadurch werden alle Elemente aus der aMap entfernt, während der Inhalt von aSuperMap intakt bleibt.
Das obige ist der detaillierte Inhalt vonWie kann ich Karten in Go tief kopieren und löschen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!