在GO语言中,一个Map就是一个哈希表的引用。但是Map元素是禁止作取地址操作的。因为map元素不是一个变量,map可能随着元素数量的增长而重新分配更大的内存空间,从而可能导致之前的地址无效。
对Map这种数据类型的理解有以下几点:
1、map中的key类型必须是可以做==运算操作的类型,浮点数作为一个KEY并不是一个好的主意,因为最坏的情况是可能出现的NaN和任何浮点数都不相等
2、用key作为索引下标来访问map将产生一个value。如果key在map中存在,那么将得到与key对应的value;如果key不存在,那么将得到value对应类型的零值。这种特性决定当你要判断在这个map中是否有key时,应该使用以下办法断言:
age, ok := ages[“bob”] if !ok { }//此时,key bob 并不存在于map中,在这个场景中,就会有两个值,一个是age == 0 ,一个则是ok==false 告诉我们bob这个key并不存在,我们就可以据此判断。
3、使用内置的delete函数可以删除元素:
delete(ages, “alice”) // remove element ages[“alice”]
4、map的遍历可以用:range,但是Map的迭代顺序是不确定的,并且不同的哈希函数实现可能导致不同的遍历顺序。在实践中,遍历的顺序是随机的,每一次遍历的顺序都不相同。这是故意的,每次都使用随机的遍历顺序可以强制要求程序不会依赖具体的哈希函数实现。
5、有时,我们可能需要一个map的key 是slices类型,但是slices并不能作==比较,不符合这个条件。这时我们可以通过两个步骤绕过这个限制。第一步&