Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iota在Go地图上定义关键点?_Go_Iota - Fatal编程技术网

Iota在Go地图上定义关键点?

Iota在Go地图上定义关键点?,go,iota,Go,Iota,假设我们有一个map[int]字符串,我们想这样定义它: var a map[int]string = { 1: "some" 3: "value" 4: "maintained" 7: "manually" // more 100 entries... } var a map[int]string var vals = []string{ "some", "value", "maintained", "manually", } func init

假设我们有一个
map[int]字符串
,我们想这样定义它:

var a map[int]string =  {
 1: "some"
 3: "value"
 4: "maintained"
 7: "manually"
 // more 100 entries...
}
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
}

我想手动维护这些值,因为它们没有模式,但键有。是否有一种方法可以像我们使用
1处理枚举值一样维护键列表?一种方法是使用一个包含所有单词的数组/切片,并通过类似于此的循环

var words []string
var a map[int]string

for i, v := range words {
   a[1 << 1 + i] = v
}
var words[]字符串
var一个映射[int]字符串
对于i,v:=范围词{

[1一种方法是使用一个包含所有单词的数组/切片,并循环使用类似的方法

var words []string
var a map[int]string

for i, v := range words {
   a[1 << 1 + i] = v
}
var words[]字符串
var一个映射[int]字符串
对于i,v:=范围词{

a[1您最好将有序值存储为一个切片,然后使用init函数生成如下映射:

var a map[int]string =  {
 1: "some"
 3: "value"
 4: "maintained"
 7: "manually"
 // more 100 entries...
}
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
}
var映射[int]字符串
var VAL=[]字符串{
“一些”,
“价值”,
“维持”,
“手动”,
}
func init(){
a=生成(映射[int]字符串)
对于idx,val:=范围val{
a[idxToKey(idx)]=val
}
}
func idxToKey(i int)int{

return 1最好将有序值存储为切片,然后使用init函数生成如下映射:

var a map[int]string =  {
 1: "some"
 3: "value"
 4: "maintained"
 7: "manually"
 // more 100 entries...
}
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
}
var映射[int]字符串
var VAL=[]字符串{
“一些”,
“价值”,
“维持”,
“手动”,
}
func init(){
a=生成(映射[int]字符串)
对于idx,val:=范围val{
a[idxToKey(idx)]=val
}
}
func idxToKey(i int)int{

return 1能够在Go中随处使用iotas会非常好,虽然能够在Go中随处使用iotas会非常好,但是使用类型为T的map,初始空间为n个元素,例如,
a=make(map[int]string,len(vals))
这会增加一点性能,但是map仍然是O(1)的摊销,这是在初始化时。我觉得这会分散我对答案的注意力。是的,不幸的是,没有什么比iota更优雅的了。谢谢。使用T类型的映射,初始空间为n个元素,例如,
a=make(map[int]string,len(vals))
这会增加一点性能,但地图仍按O(1)摊销,这是在初始化时。我觉得这会分散我对答案的注意力。是的,不幸的是,没有什么比iota更优雅的了。谢谢。