假设我们有一个map[int]string
,我们想要这样定义它:
var a map[int]string = {
1: "some"
3: "value"
4: "maintained"
7: "manually"
// more 100 entries...
}
我想手动维护值,因为它们没有模式,但是键有。有没有办法像使用enum值那样维护键列表1 << 1 + iota
?
我不是问是否有可能将iota用作地图键(不幸的是,它不是AFAIK),只是有一种同样优雅的方法可以在定义的序列上创建键。
最好的选择是将有序值存储为切片,然后使用init函数生成映射,如下所示:
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
}
在Go Playground上运行它。
您可以更改idxToKey
为所需的任何转换。在这种情况下,我已经使用了您提供的那一个,但是可以是任何东西。参数将放到通常放置iota
关键字的位置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句