定义格式
- map[K]V
- map[K1]map[K2]V(复合Map)
创建map
func main() {
// 定义map的几种方式
m := map[string]string {
"zhang":"san",
"li":"si",
"wang":"wu"}
//map[li:si wang:wu zhang:san]
fmt.Println(m)
m2 := make(map[string]int)// 这种是一个空map
//map[]
fmt.Println(m2)
var m3 map[string]int // 这是nil
//map[]
fmt.Println(m3)
}
遍历map
func main() {
// 定义map的几种方式
m := map[string]string {
"zhang":"san",
"li":"si",
"wang":"wu"}
// 遍历map
// map是无序的,遍历的顺序会有多种
for k,v := range m{
fmt.Println(k,v)
}
}
//zhang san
//li si
//wang wu
遍历时如果不需要K/V时,k/v使用_表示
通过key获取value
func main() {
// 定义map的几种方式
m := map[string]string {
"zhang":"san",
"li":"si",
"wang":"wu"}
// 通过key获取value
s := m["zhang"]
// san
fmt.Println(s)
s2 := m["zang"]
//
fmt.Println(s2)//打了一个空串,拿到的是一个ZeroValue
s3,ok := m["l"]
// false
fmt.Println(s3,ok)
if s3,ok := m["li"];ok{
// si
fmt.Println(s3)
}else {
fmt.Println("key does not exist")
}
if s3,ok := m["l"];ok{
fmt.Println(s3)
}else {
// key does not exist
fmt.Println("key does not exist")
}
}
删除key
func main() {
// 定义map的几种方式
m := map[string]string {
"zhang":"san",
"li":"si",
"wang":"wu"}
if s3,ok := m["li"];ok{
// si
fmt.Println(s3)
}else {
fmt.Println("key does not exist")
}
delete(m,"li")
if s3,ok := m["li"];ok{
fmt.Println(s3)
}else {
// key does not exist
fmt.Println("key does not exist")
}
}
- 创建: make(map[K]V)
- 获取元素:m[key]
- key不存在时,获得Value类型的初始值(ZeroValue)
- 用value,ok:=m[key]来判断是否存在key
- 用delete删除一个key
- 使用range单独遍历key或者value,或者遍历key,value对
- 不保证遍历顺序,如需顺序,需手动对key排序
- 使用len获得元素个数
- map使用哈希表,必须可以比较相等
- 除了slice,map,function的内建类型都可以作为key
- Struct类型不包含上述字段,也可以作为key