回答

收藏

如何复制map?

技术问答 技术问答 360 人阅读 | 0 人回复 | 2023-09-12

我正试把地图 ( )amap)将内容复制到另一个 ( aSuperMap) 中,然后清除,amap这样它就可以在下一个迭代/循环中使用新的值。问题是,如果你不清除超级地图中的引用,你就不能清除地图。这是一些伪代码。
9 c% N% g; w: g# j  V& N, v( _
    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)}
    9 P# \& N, t5 M% {. ]
我也尝试了一些动态的东西,但很明显抛出了一个错误(不能分配给 nil)
; O! ^6 e5 s6 G( \" b
    aSuperMap[y][x] = aData7 G: a5 U0 r; u+ X2 L
问题是如何创建相关地图?PHP 中,我只用 aSuperMap[y][x] = aData。好像golang没有明显的办法。delete(aMap,x)从超级地图中删除 它的参考,它也将被删除。如果我不删除它,超级地图最终会有重复的数据。基本上,它会在每个循环中获得aMap新值加上所有旧值。
  G) V4 c! L. ]% i* A                                                               
0 {& W% E' t$ Q& N) R  j& G    解决方案:                                                                5 {+ Z; g* ^( {1 X
                                                                你不是在复制地图,而是在复制引用地图。delete因此,对原始地图和超级地图中的值进行了修改。要复制地图,你必须使用它for循环:
7 n9 \4 D* M% o- ?5 ~; G
    for k,v := range originalMap {  newMap[k] = v}' s  r1 p2 {- F/ m" F
这是已停止的 SO 文档中的一个示例:
& R3 y" y; t4 D4 T4 n
    // Create the original maporiginalMap := make(map[string]int)originalMap["one"] = 1originalMap["two"] = 2// Create the target maptargetMap := make(map[string]int)// Copy from the original map to the target mapfor key,value := range originalMap {  targetMap[key] = value}" b- G7 ~  I% Q
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则