Golang学习笔记(八):Map

495 阅读2分钟

原创作者,公众号【程序员读书】,欢迎关注公众号,转载文章请注明出处哦。

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表示不存在
    
}


你的关注,是我写作路上最大的鼓励!