Heim >Backend-Entwicklung >Golang >Wie kann ich Karten in Go tief kopieren und löschen?

Wie kann ich Karten in Go tief kopieren und löschen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-29 17:46:11314Durchsuche

How to Deep Copy and Clear Maps in Go?

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!

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