Golang的map

//Map
//map[keytype]valuetype
var m map[int]string
//m = make(map[int]string)
m = map[int]string{}
fmt.Println(m)

a := make(map[int]string)
a[1] = “a_map_OK”
fmt.Println(a[1])
av := m[1]
fmt.Println(av)
delete(m, 1)
fmt.Println(av)

var b map[int]map[int]string
b = make(map[int]map[int]string)
//因为key是一个map,所以需要初始化才能用
b[1]=make(map[int]string)
b[1][1] = “b_map_OK”
bv := b[1][1]
fmt.Println(bv)
//可以使用多返回值的方式判断vaule对应的key的map有没有被初始化
c , ok := b[2][1]
if !ok {
fmt.Println(“map未初始化,现在进行初始化”)
b[2]=make(map[int]string)
}
b[2][1]=”b_2_1_OK”
c ,ok = b[2][1]
fmt.Println(c,ok)

/*//相当于for each
//i是索引,v是对应的value
for i,v :=range slice{
slice[i]
}*/

//map没有索引,所以返回的是键值对,在for range中直接对vaule进行操作不会影响到map
//如果要修改map,则应该对map[k]进行修改
sm:=make([]map[int]string,5)
for _, v :=range sm {
v=make(map[int]string,1)
v[0]=”OK”
fmt.Println(v)
}
//至此,输出的sm依然为空,因为当前是对for range中的v进行操作,所以并不会影响到sm
fmt.Println(sm)

for k :=range sm{
sm[k] = make(map[int]string)
sm[k][0] = “OK”
fmt.Println(sm[k])
}
fmt.Println(sm)

//对map进行间接排序
d :=map[int]string{1:”a”,2:”b”,3:”c”,4:”d”,5:”e”}
e:= make([]int,len(d))
i:=0
for k,_ :=range d{
e[i] = k
i++
}
fmt.Println(“排序前:”,e)
sort.Ints(e)
fmt.Println(“排序后:”,e)

//将map中的key和value进行交换
f:=map[int]string{1:”a”,2:”b”,3:”c”,4:”d”,5:”e”,6:”f”}
g:=make(map[string]int,len(f))
fmt.Println(f)
for k,v :=range f{
g[v] = k
}
fmt.Println(g)