dqwh1119 2014-12-07 04:01
浏览 2
已采纳

是否要在Go地图上定义键?

Let's suppose we have a map[int]string and we want to define it like this:

var a map[int]string =  {
 1: "some"
 3: "value"
 4: "maintained"
 7: "manually"
 // more 100 entries...
}

I would like to maintain the values manually because they have no pattern, but the keys have. Is there a way to maintain the key list just like we do with enum values using 1 << 1 + iota?

I'm not asking if it's possible to use iota as a map key (unfortunately it's not AFAIK), just if there is an equally elegant way to create the keys on a defined sequence.

  • 写回答

2条回答 默认 最新

  • dtsjq28482 2014-12-07 04:11
    关注

    Your best bet is to store the ordered values as a slice, and then use an init function to generate the map like this:

    var a map[int]string
    var vals = []string{
        "some",
        "value",
        "maintained",
        "manually",
    }
    
    func init() {
        a = make(map[int]string)
        for idx, val := range vals {
            a[idxToKey(idx)] = val
        }
    }
    
    func idxToKey(i int) int {
        return 1<<1 + i
    }
    

    Run it on the Go Playground.

    You can change idxToKey to be whatever transformation you want. I've used the one you gave in this case, but it could be anything. The argument goes where you'd normally put the iota keyword.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!