Erstellen einer assoziativen Karte in Go: So kopieren und löschen Sie das Original in der Tiefe
In Go versuchen Sie, den Inhalt zu kopieren einer Karte namens aMap in eine andere Karte namens aSuperMap. Anschließend möchten Sie aMap löschen, um in der nächsten Schleifeniteration neue Werte zu akzeptieren. Sie stehen jedoch vor dem Problem, die Karte zu löschen, ohne auch ihre Referenz in einer SuperMap zu löschen.
Das Problem mit Referenzen
Ihr Pseudocode veranschaulicht dies, wenn Sie sie löschen Wenn Sie mit delete(aMap, x) ein Element aus aMap löschen, wird der Verweis auf dieses Element auch aus aSuperMap entfernt. Dies liegt daran, dass aSuperMap[y] einen Verweis auf aMap enthält und wenn Sie aMap ändern (in diesem Fall durch Löschen eines Elements), ändern Sie tatsächlich die zugrunde liegenden Daten, auf die aSuperMap verweist.
Tiefenkopieren von Karten
Um wirklich eine assoziative Karte in Go zu erstellen, müssen Sie eine Tiefenkopie der Karte erstellen. Dazu gehört die Erstellung eines neuen Kartenobjekts mit einer eigenen Kopie der Daten, anstatt einfach einen Verweis auf die Originalkarte zu halten.
Sie können dies erreichen, indem Sie manuell eine for-Schleife erstellen, die die Originalkarte durchläuft und hinzufügt jedes Schlüssel-Wert-Paar zur neuen Karte:
for k, v := range originalMap { newMap[k] = v }
Auf diese Weise erstellen Sie eine neue Karte, die dieselben Daten wie die ursprüngliche Karte enthält, aber die beiden Karten sind separate Objekte mit eigenen Kopien von Die Daten.
Löschen der Originalkarte
Sobald Sie eine tiefe Kopie der Karte haben, können Sie die Originalkarte löschen, ohne dass dies Auswirkungen auf die neue Karte hat. Dazu können Sie die Reset-Funktion aus dem Container-/Listenpaket verwenden:
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) } // Deep copy aMap into newMap newMap := make(map[string]aStruct) for k, v := range aMap { newMap[k] = v } // Clear the original aMap container/list.Reset(aMap) // Save the new map saveASuperMap(newMap) }
Durch Befolgen dieser Schritte können Sie erfolgreich eine assoziative Karte in Go erstellen und eine tiefe Kopie der Karte erstellen, um sie beizubehalten die ursprünglichen Daten und löschen Sie die ursprüngliche Karte, um neue Werte in der nächsten Schleifeniteration zu akzeptieren.
Das obige ist der detaillierte Inhalt vonWie kann ich eine Go-Map tief kopieren und das Original löschen, ohne die Kopie zu beeinträchtigen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!