Go基础(五)Map

87 阅读1分钟

Go map的底层实现时hash table,根据key查找value的时间复杂度时O(1)

map.png

Go的初始化

var m map[string]int //声明map,指定key和value的数据类型
m = make(map[string]int) //初始化,容量为0
m = make(map[string]int, 200) //初始化,容量为5。强烈建议初始化时给一个合适的容量,减少扩容的概率
m = map[string]int{"语文": 0, "数学": 39} //初始化时直接赋值

添加和删除key

  • m[“英语”] = 59 //往map里添加key-value对
  • m[“英语”] = 70 //修改 会进行覆盖之前的值
  • delete(m,"数学") //从map里删除key-value
  • len(m) //获取map的长度
  • go不支持对map上执行cap函数

根据key找value

  • 读取key对应的value,如果key不存在,则返回value类型的默认值 value:=m["数学"]
  • 取key对应的value建议使用这种方法,先判断key是否存在
if value,exists := m["语文"];exists{
    fmt.Println(value)
}else{
    fmt.Println("map里不存在[语文]这个key")
}

遍历map


    for key,valuee := range m {
        fmt.Printf("%s=%d\n",key,value)
    }

例子

var m map[string]int
fmt.Println(len(m))
m = make(map[string]int)
fmt.Println(len(m))
m = make(map[string]int, 3)
fmt.Println(len(m))
m = map[string]int{"A": 3, "B": 2}
fmt.Println(len(m))

m["D"] = 18
fmt.Println(len(m))

for key, value := range m {
   fmt.Printf("key : %s , value : %d \n", key, value)
}

delete(m, "D")

for key, value := range m {
   fmt.Printf("key : %s , value : %d \n ", key, value)
}

va, ok := m["A"]
if ok {
   fmt.Println(va)
} else {
   fmt.Println("no value ")
}