go - pegar - Cómo copiar un mapa?
cómo copiar y pegar un mapa de google maps a word (2)
Copia de elemento individual, parece funcionar para mí con solo un simple ejemplo.
maps := map[string]int {
"alice":12,
"jimmy":15,
}
maps2 := make(map[string]int)
for k2,v2 := range maps {
maps2[k2] = v2
}
maps2["miki"]=rand.Intn(100)
fmt.Println("maps: ",maps," vs. ","maps2: ",maps2)
Estoy tratando de copiar el contenido de un mapa ( amap
) dentro de otro ( aSuperMap
) y luego aSuperMap
amap
para que pueda tomar nuevos valores en la próxima iteración / ciclo. El problema es que no puedes borrar el mapa sin borrar su referencia en el super mapa también. Aquí hay un pseudo código.
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
saveASuperMap(something)
}
También probé algunas cosas dinámicas, pero obviamente arroja un error (no se puede asignar a cero)
aSuperMap[y][x] = aData
La pregunta es ¿cómo puedo crear un mapa asociativo? En PHP simplemente uso aSuperMap [y] [x] = aData. Parece que Golang no tiene ningún método obvio. Si borro delete(aMap, x)
se elimina su referencia del super mapa. Si no lo borro, el supermapa termina con datos duplicados. Básicamente, en cada ciclo obtiene un aMap
con el nuevo valor más todos los valores anteriores.
No estás copiando el mapa, sino la referencia al mapa. Su delete
modifica los valores tanto en su mapa original como en el supermapa. Para copiar un mapa, debes usar un ciclo for
como este:
for k,v := range originalMap {
newMap[k] = v
}
Aquí hay un ejemplo de la documentación de SO ahora retirada:
// Create the original map
originalMap := make(map[string]int)
originalMap["one"] = 1
originalMap["two"] = 2
// Create the target map
targetMap := make(map[string]int)
// Copy from the original map to the target map
for key, value := range originalMap {
targetMap[key] = value
}
Extraído de Maps - Copiar un mapa . El autor original fue JepZ . Los detalles de atribución se pueden encontrar en la página del contribuyente . La fuente está licenciada bajo CC BY-SA 3.0 y se puede encontrar en el archivo de documentación . ID del tema de referencia: 732 e ID de ejemplo: 9834.