Golang学习笔记(八):Map
Map,也称为哈希表,是Go语言为我们提供的另一种很实用的数据结构,它表示一个无序的key/value对集合,哈希表中的每个key值都是唯一的,我们可以通过map中key值检索、更新、删除对应的value值。
Map是引用类型,底层引用了一个哈希表,map类型可用map[K]V表示,其中K表示key,V表示value,注意key必须是可以使用==进行相等比较的数据类型,但不建议使用浮点型作为key,而value则可以是任意的数据类型。
定义与使用
创建一个map的类型,主要有两种方式,通过使用内置函数make或字面量赋值。
make
var m = make(map[string]int)
字面量
var m = map[string]int{"one":1,"two":2}
获取长度、访问元素与赋值
创建了map类型后,就可以访问map的元素或为元素赋值了,使用内置函数len()还可以获取map长度,也就是map元素的个数。
m["three"] = 3
fmt.Println(len(m))//输出3
fmt.Println(m["one"])
注意事项
需要注意的是,map中的元素不可取址,如以下代码所示
a = &m["one"]//错误
通过字面量赋值量,可以使用{}直接声明一个空的map类型, 空的map并不等nil,而直接声明一个map类型时,则该map变量的值为nil。如:
m1 := map[string]int{}//空的map
var m2 map[string]int //nil
等nil的map类型变量,必须使用make或字面量初始化,使其引用一个哈希表,否则,直接向元素赋值,则会报panic错误。
m1["one"] = 10//m1引用一个哈希表
删除操作
如果想删除map中的元素,则可以使用内置delete()函数,函数的参数为该map和其中元素的key值。
delete(m,"one")
当然删除的key不存在时,并不会报错,而是返回0,其实,如果通过key访问元素时,如果key不存在,也会返回对应value的零值。
遍历
map也像数组一样,可以使用for…range语句遍历迭代,但是map的迭代顺序并不确定。也就是遍历是无序的。
for k,v := range m {
fmt.Println(k, v)
}
判断key是否存在
前面我们知道,如果map的key不存在,map会返回value的类型的零值,但存在的key,其他的value也可能为零值,所以我们没有通过这种方式知道map是否存在某个key值。
Go支持使用key访问map时候,返回对应value值和一个是否存在的标识,为bool类型,一般命名为ok,如:
v,ok := m["four"]
if ok { // true表示key存在,false表示不存在
}
ft_update_time2019-08-03 17:06