map
类似于哈希表或者字典,以key-value形式存储数据
key必须是支持==或!=比较运算的类型,不可以是函数,map或slice
可以用slice或者数组,则这俩有限,最后才用map
使用make创建
map的简单操作
package main
import "fmt"
func main(){
var m1 map[int]string
m1=map[int]string{}//must have
m2:=make(map[int]string)//the way to construct the map
m1[1]="OK"
fmt.Println(m1)
fmt.Println(m2)
fmt.Println(m1[1])
//delete
delete(m1,1)//delete the 1 in m1
fmt.Println(m1)
fmt.Println(m1[1])//NULL if delete
}
复杂map的初始化
package main
import "fmt"
func main(){
var m map[int]map[int]string
m=make(map[int]map[int]string)//init the first
m[1]=make(map[int]string)//only the m[1] has been initialized
m[1][1]="OK"
fmt.Println(m)
}
map是否有被初始化的检验
package main
import "fmt"
func main(){
var m map[int]map[int]string
m=make(map[int]map[int]string)//init the first
a,ok:=m[2][1]
fmt.Println(a,ok)//the way the know whether the m has been initialized
if !ok{
m[2]=make(map[int]string)
}
m[2][1]="GOOD"
a,ok=m[2][1]
fmt.Println(a,ok)
}
有关map的迭代操作
package main
import "fmt"
func main(){
sm:=make([]map[int]string,5)
for _,v:=range sm{
v=make(map[int]string,1)//v is copy has no influence to sm
v[1]="OK"//if we have i then change sm[i] is useful
fmt.Println(v)
// sm[i] = make(map[int]string,1)
// sm[i][1] = "OK"
// fmt.Println(sm[i])
}
fmt.Println(sm)
}
有关map的转移和排序
package main
import "fmt"
import "sort"
func main(){
m:=map[int]string{1:"a",2:"b",3:"c",4:"d",5:"e"}
m2:=make(map[string]int,len(m))
s:=make([]int,len(m))
i:=0
for k,_:=range m{
m2[m[k]]=k
s[i]=k
i++
}//let the value of map to s
sort.Ints(s) //map doesn't have order
fmt.Println(s)
fmt.Println(m2)
}
}
GO关于map的晨读:
https://studygolang.com/articles/10720