map里key的value值是可以放slice的,反之slice的index也是可以存放map的。
package mainimport("fmt")func sliceMap() {/**var s []map[string]ints = make([]map[string]int,5,16)*/x := make([]map[string]int,5,16)for index,value := range x {fmt.Printf("index = %d,value = %v\n",index,value)}x[0] = make(map[string]int,10)x[0]["jack"] = 10}
上面代码做了哪些事:
第9行:声明了一个空切片类型为map的变量s
第10行:使用make初始化切片,否则无法操作切片
第13行:使用了简写声明的方式初始化切片
第15行:使用for range对x进行遍历,这里要注意的是index指的是切片下标,与map的key值不同,这里要区分一下
第16行:打印下标与下标值,因为初始化的切片长度是5个,所以每个下标的值都是一个map,打印时要使用%v格式化
第19行:因为每个下标的值都是map,但是这些map都没有进行过初始化,所以要使用make进行初始化一次才能进行赋值
第21行:为切片x第一个下标的map中第一个key:jack进行赋值
打印结果:index = 0,val = map[jack:10]index = 1,val = map[]index = 2,val = map[]index = 3,val = map[]index = 4,val = map[]
切片与map的关系可以看作是以下图:
map里放入slice
package mainimport("fmt")fun mapSlice() {/**声明方式:var s map[string][]ints = make(map[string][]int)*/s := make(map[string][]int)key := "id0"val,ok := s[key]if !ok {s[key] = make([]int,0,16)val = s[key]}val = append(val,100)val = append(val,200)s[key] = val}
上面代码作用:
第15行:初始化一个key为string,value为空切片的map
第17行:初始化一个string值类型变量key
第19行:常用map值交换操作,s[key]代表的当前的key+value,key会给ok,value会给val
第21行:取反操作,如果变量key的值存不存在于map中,那么对map下面的key的value进行切片初始化(map中所有的value都是切片类型,所以要进行初始化)
第22行:对map中的value进行切片初始化
第23行:将初始化的切片给val,打印结果为:val = [],由此可知,val取得到的value
第26行:对val[0]进行追加数据操作,此时还能放入15个元素
第27行:对val[1]进行追加数据操作,此时还能放入14个元素
第29行:将追加好的val切片赋值给s[key]
s[key]打印结果:s[key] = [100 200]
s打印结果:s = map[id0:[100 200]]
