AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
## map 哈希表是一种巧妙并且实用的数据结构。它是一个无序的key/value对的集合,其中所有的key都是不同的,然后通过给定的key可以在常数时间复杂度内检索、更新或删除对应的value。 在Go语言中,**一个map就是一个哈希表的引用**,map类型可以写为map\[K\]V,其中K和V分别对应key和value。 K对应的key必须是支持==比较运算符的数据类型,所以map可以通过测试key是否相等来判断是否已经存在。虽然浮点数类型也是支持相等运算符比较的,但是将浮点数用做key类型则是一个坏的想法。 ## delete和查找 使用delete和查找功能. 都是安全的,如果使用delete时,没有这个K,那么什么也不会发生. 在查找K如果不存在,就会返回零值. 使用内置的delete函数可以删除元素: ~~~ delete(ages, "alice") // remove element ages["alice"] ~~~ ## 常用操作 而且`x += y`和`x++`等简短赋值语法也可以用在map上,所以上面的代码可以改写成 ~~~ ages["bob"] += 1 ~~~ 更简单的写法 ~~~ ages["bob"]++ ~~~ ## map无法取元素地址 但是map中的元素并不是一个变量,因此我们不能对map的元素进行取址操作(但是slice是可以的,slice扩容时也是重新分配了底层的地址,那么为什么呢?): ~~~ _ = &ages["bob"] // compile error: cannot take address of map element ~~~ 禁止对map元素取址的原因是map可能随着元素数量的增长而重新分配更大的内存空间,从而可能导致之前的地址无效。 ## 使用range遍历 只能使用range遍历map,如果只有一个接收值就是map的key,如果是两个就是key和value. ## map增删改查 map上的大部分操作,包括查找、删除、len和range循环都可以安全工作在nil值的map上,它们的行为和一个空的map类似。但是向一个nil值的map存入元素将导致一个panic异常: