I'm trying to copy the contents of a map ( amap
) inside another one (aSuperMap
) and then clear amap
so that it can take new values on the next iteration/loop.
The issue is that you can't clear the map without to clear its reference in the supermap as well.
Here is some pseudo 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
saveASuperMap(something)
}
I've also tried some dynamic stuff but obviously it throws an error (cannot assign to nil)
aSuperMap[y][x] = aData
The question is how can I create an associative map ? In PHP I simply use aSuperMap[y][x] = aData. It seems that golang doesn't have any obvious method. If I delete delete(aMap, x)
its reference from the super map is deleted as well. If I don't delete it the supermap ends up with duplicate data. Basically on each loop it gets aMap
with the new value plus all the old values.
Best Answer
You are not copying the map, but the reference to the map. Your
delete
thus modifies the values in both your original map and the super map. To copy a map, you have to use afor
loop like this:Here's an example from the now-retired SO documentation: