Go语言入门5(map哈希表)

打印 上一主题 下一主题

主题 946|帖子 946|积分 2838

Map

​        哈希表是一种巧妙并且实用的数据结构。它是一个无序的key/value对的集合,其中所有的key 都是不同的,然后通过给定的key可以在常数时间复杂度内检索、更新或删除对应的value。
​        在Go语言中,一个map就是一个哈希表的引用,map类型可以写为map[K]V,其中K和V分别 对应key和value。map中所有的key都有相同的类型,所有的value也有着相同的类型,但是 key和value之间可以是不同的数据类型。
创建map
  1. // 使用make创建map
  2. robotName := make(map[string]string)
  3. // 通过字面值创建map,同时还能初始化一系列键值对
  4. robotName := map[string]string{
  5.     "robot01": "Alice",
  6.     "robot02": "Jack",
  7.     "robot03": "Tom",
  8. }
复制代码
map的增删改查
  1. // 新增map元素
  2. robotName["robot04"] = "Cindy"
  3. // 访问map中元素
  4. fmt.Println(robotName["robot01"]) // robot01 : Alice
  5. // 查询map中元素个数
  6. fmt.Println(len(robotName)) // 4
  7. // 删除map中元素
  8. delete(robotName, "robot03")
  9. // 判断是否有这个元素,ok是bool类型,如果有返回true,反之返回false
  10. name, ok := robotName["robot0"]
  11. fmt.Println(name) // Alice
  12. fmt.Println(ok) // true
复制代码
map的遍历

​        要想遍历map中全部的key/value对的话,可以使用range风格的for循环实现,和之前的slice遍 历语法类似。但是,Map的迭代顺序是不确定的,并且不同的哈希函数实现可能导致不同的遍历顺序。
  1. // 通过range循环遍历map
  2. for index, value := range robotName {
  3.     fmt.Println(index + " : " + value)
  4. }
  5. /*
  6. robot01 : Alice
  7. robot02 : Jack
  8. robot04 : Cindy
  9. */
复制代码
嵌套map

​        Map的value类型也可以是一个聚合类型,比如是一个map或slice,
  1. // 声明嵌套map
  2. robotInfo := map[string]map[string]string{}
  3. // 因为上面的声明语句只分配了外层空间,所以需要通过make分配内层空间
  4. // 写法1
  5. robotInfo["robot01"] = make(map[string]string)
  6. robotInfo["robot01"]["name"] = "Alice"
  7. robotInfo["robot01"]["age"] = "18"
  8. // 写法2
  9. robotInfo["robot02"] = map[string]string{
  10.     "name": "Bob",
  11.     "age":  "20",
  12. }
  13. // 遍历嵌套map
  14. for index1, value1 := range robotInfo {
  15.     for index2, value2 := range value1 {
  16.         fmt.Println(index1 + " : " + index2 + " : " + value2)
  17.     }
  18. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

北冰洋以北

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表