以出于性能的考虑,对于大的 map 或者会快速扩张的 map,即使只是大概知道容量,也最好先标明。
map的排序
map 默认是无序的,不管是按照 key 还是按照 value 默认都不排序。
如果你想为 map 排序,需要将 key(或者 value)拷贝到一个切片,再对切片排序,然后可以使用切片的 for-range 方法打印出所有的 key 和 value。
在函数间传递Map
函数间传递Map是不会拷贝一个该Map的副本的,也就是说如果一个Map传递给一个函数,该函数对这个Map做了修改,那么这个Map的所有引用,都会感知到这个修改。
func main() {
dict := map[string]int{"kevin": 40, "itbsl": 25}
modify(dict)
fmt.Println(dict["kevin"])
fmt.Printf("main函数dict的地址为: %p\n", dict)
}
func modify(dict map[string]int) {
dict["kevin"] = 10
fmt.Printf("modify函数dict的地址为: %p\n", dict)
}
输出结果为:
modify函数dict的地址为: 0xc000076120
10
main函数dict的地址为: 0xc000076120
上面这个例子输出的结果是10
,也就是说已经被函数给修改了,可以证明传递的并不是一个Map的副本。这个特性和切片是类似的,这样就会更高,因为复制整个Map的代价太大了。