【问题标题】:golang when iterate map, how to get key as pointer?golang迭代地图时,如何将键作为指针?
【发布时间】:2018-03-04 18:37:28
【问题描述】:

目前我正在存储一个键为 Struct (MyIntC) 的地图。我想将地图中的所有键作为切片检索。切片将是指向映射键的指针。这样就没有多个密钥的副本。

当我在这里尝试 (https://play.golang.org/p/bclmCh_YV5) 时,它不起作用。

切片中的所有元素都将指向最后迭代的地图关键元素。

为什么会这样?我该如何克服呢?

注意:我怀疑这与Slice of structs vs a slice of pointers to structs 非常相似,我总是使用局部变量地址。

谢谢。

【问题讨论】:

    标签: go


    【解决方案1】:

    关于范围循环中与k 相关的问题,您是正确的。 k 是一个局部变量,在每次迭代中,您只需将相同的指针地址添加到 slice

    您始终可以使用指向 MyIntC 的指针作为映射键。

    // ...
    slice := make([]*MyIntC,0, 5)
    // ...
    mapInts := make(map[*MyIntC]string)
    // ...
    for k, _ := range mapInts {
       slice = append(slice, k)
    }
    // ...
    

    工作示例:https://play.golang.org/p/Opd7RVywNa

    【讨论】:

      猜你喜欢
      • 2015-02-01
      • 1970-01-01
      • 2014-12-02
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多