Go语言学习之——map

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)

你可能感兴趣的:(Go语言学习之——map)