Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.29 KB | None | 0 0
  1. ### Map
  2. - map是基于散列表来实现,就是我们常说的Hash表
  3. - map存储的是无序的键值对集合
  4. - map的key,可以重复,如果重复了,则相当于覆盖,后面覆盖前者
  5. - map中的key可以是很多种类型,比如bool、数字、string、指针等,但是含有切片或函数的复杂类型则不能作为键使用,因为这几个没法用 == 来判断
  6. - 对于map的值来说,就没有什么限制了,切片这种在键里不能用的,完全可以用在值里
  7.  
  8. ```go
  9. func main() {
  10. var m map[int]string
  11.  
  12. m[0] = "a"
  13. m[1] = "b"
  14. m[0] = "c"
  15. fmt.Println(m)
  16. }
  17. // Output:
  18. panic: assignment to entry in nil map
  19. ```
  20. - 一个nil的Map是未初始化的,但是这样我们是不能操作存储键值对的
  21. - 只有使用map字面量,或者使用make函数分配内存后,才可以使用
  22.  
  23. ```go
  24. func main() {
  25. dict := map[string]int{"王五": 60, "张三": 43}
  26. modify(dict)
  27. fmt.Println(dict["张三"])
  28. }
  29.  
  30. func modify(dict map[string]int) {
  31. dict["张三"] = 10
  32. }
  33. // Output:
  34. 10
  35. ```
  36. - 如果一个map传递给一个函数,该函数对这个map做了修改,那么这个map的所有引用,都会感知到这个修改
  37. - 可以证明传递的并不是一个map的副本,这个特性和切片是类似的,这样性能就会更高,因为复制整个map的代价太大了
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement