1、定义:map[key的类型]value的类型
m1 := map[string]int{
"a": 99,
"b": 40,
"c": 33,
"d": 100,
}
m2 := make(map[int]int) // empty map
var m3 map[string]string // nil
fmt.Println(m1, m2, m3) // output: map[a:99 b:40 c:33 d:100] map[] map[]
key的类型要求:
map使用哈希表,必须可以比较相等
除了slice,map,function的内建类型都可以作为key
自己定义的Struct类型,如不包含以上字段,也可作为key
2、遍历
m1 := map[string]int{
"a": 99,
"b": 40,
"c": 33,
"d": 100,
}
for k,v := range m1 {
fmt.Println(k, v)
}
// k := range m1 只要key
// _,v := range m1 只要value
输出为:
b 40
c 33
d 100
a 99
每次输出顺序可能不能,且与开始定义的顺序也可能不同,因为存储时是无序存储的
3、判断某值是否存在于map中
m1 := map[string]int{
"a": 99,
"b": 40,
"c": 33,
"d": 100,
}
score_a := m1["a"]
fmt.Println(score_a) // output:99
score_f := m1["f"] // f在m1中并不存在,但也可以进行取值,zero value
fmt.Println(score_f) // output:0,如果value类型是string,输出为空串
score_a, ok := m1["a"]
fmt.Println(score_a, ok) // output:99 true
score_f, ok := m1["f"]
fmt.Println(score_f, ok) // output:0 false
所以使用时可以使用一下写法:
if score_f, ok := m1["f"]; ok{
fmt.Println(score_f, ok)
}else{
fmt.Println("This key does not exist!")
} // output:This key does not exist!
4、删除元素
m1 := map[string]int{
"a": 99,
"b": 40,
"c": 33,
"d": 100,
}
name, ok := m1["c"]
fmt.Println( name, ok ) // output:33 true
delete( m1, "c") // delete(map名,key)
name, ok = m1["c"] //因为之前已经定义过,所以不能再写:=
fmt.Println( name, ok ) // output:0 false
5、长度
len(m1)
网友评论