回答

收藏

如何复制map?

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

我正试把地图 ( )amap)将内容复制到另一个 ( aSuperMap) 中,然后清除,amap这样它就可以在下一个迭代/循环中使用新的值。问题是,如果你不清除超级地图中的引用,你就不能清除地图。这是一些伪代码。
5 C8 H% S2 Z  I9 b2 i8 C$ W! _7 J
    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)}
    : W! s& Q$ c' d$ ^
我也尝试了一些动态的东西,但很明显抛出了一个错误(不能分配给 nil). S$ z( O. K4 J' _& e
    aSuperMap[y][x] = aData
    % U2 W' R+ ~# l5 E5 e
问题是如何创建相关地图?PHP 中,我只用 aSuperMap[y][x] = aData。好像golang没有明显的办法。delete(aMap,x)从超级地图中删除 它的参考,它也将被删除。如果我不删除它,超级地图最终会有重复的数据。基本上,它会在每个循环中获得aMap新值加上所有旧值。
: F0 D% i- s0 S) g                                                               
: {. U2 X) t1 K0 b" V    解决方案:                                                               
) g# j  N2 t! A                                                                你不是在复制地图,而是在复制引用地图。delete因此,对原始地图和超级地图中的值进行了修改。要复制地图,你必须使用它for循环:7 c% p- a+ e0 F$ ~$ W, C4 Z; e& s0 E
    for k,v := range originalMap {  newMap[k] = v}; j, q( I2 O5 C* w, o: K6 I& W
这是已停止的 SO 文档中的一个示例:& A4 v3 A" y8 `
    // 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}
    * `" Z2 `6 A2 c0 X& K* s5 q
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则