Heim > Backend-Entwicklung > Golang > Wie kann ich eine Go-Map tief kopieren und das Original löschen, ohne die Kopie zu beeinträchtigen?

Wie kann ich eine Go-Map tief kopieren und das Original löschen, ohne die Kopie zu beeinträchtigen?

Susan Sarandon
Freigeben: 2024-12-30 13:05:09
Original
497 Leute haben es durchsucht

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

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
}
Nach dem Login kopieren

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)
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage