1、什么是map
map是go中的关系映射容器,其内部是基于散列表(hash)
实现的。map是一种无序的数据结构,在go中,map是引用类型,需要初始化后才能使用。
2、map的定义
map的定义语法:map[keyType]valueType
- keyType:map中key的数据类型
- vulueType:map中value的数据类型
3、map的初始化
map是引用类型,它的默认值为nil。make()函数
可以用来初始化map。它的语法为:make(map[keyType]valueType, [cap])
- cap:map的容量,不是必须的参数
4、map的基本使用
func main() {
m := make(map[string]int)
m["张三"] = 100
m["李四"] = 200
m["王五"] = 300
// 打印map
fmt.Println(m) // map[张三:100 李四:200 王五:300]
// 取map的某个值
i := m["王五"]
fmt.Println(i) // 300
}
5、判断键值对是否存在
在实现判断键值对是否存在时,先来看一个demo。
func main() {
m := make(map[string]int)
m["张三"] = 100
i := m["李四"]
fmt.Println(i) // 0
m1 := make(map[string]string)
m1["张三"] = "123"
s := m1["李四"]
fmt.Println(s) // 打印空串
}
从上面的demo可以得出这样的结论:如果map不存在某个键,而程序又取获取这个键的值时,得到得值类型得默认值。这样在实际程序开发中,很有可能造成一些逻辑上得错误。
go语言提供了一种判断map中键是否存在得特殊写法:val, isPresent = map[key]
其中isPresent
是一个bool型
的值,它表示这个键是否存在
func main() {
m := make(map[string]int)
m["张三"] = 100
m["李四"] = 200
value1, isPresent1 := m["李四"]
if isPresent1 {
fmt.Println(isPresent1) // true
fmt.Println(value1) // 200
} else {
fmt.Println("该键不存在")
}
value2, isPresent2 := m["王五"]
if isPresent2 {
fmt.Println(isPresent2)
fmt.Println(value2)
} else {
fmt.Println(isPresent2) // false
fmt.Println("该键不存在")
}
}
网友评论