疯狂编程网

  • 首页
  • 后端
    • GOLANG
    • PHP
  • 前端
  • 客户端
  • 服务器
  • AIGC
  • 开发工具
  • 代码人生
  • 关于本站
    • 联系我们
    • 免责声明
  1. 首页
  2. 后端
  3. GOLANG
  4. 正文

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

2023年5月10日 471点热度 0人点赞 0条评论

Map

​ 哈希表是一种巧妙并且实用的数据结构。它是一个无序的key/value对的集合,其中所有的key 都是不同的,然后通过给定的key可以在常数时间复杂度内检索、更新或删除对应的value。

​ 在Go语言中,一个map就是一个哈希表的引用,map类型可以写为map[K]V,其中K和V分别 对应key和value。map中所有的key都有相同的类型,所有的value也有着相同的类型,但是 key和value之间可以是不同的数据类型。

创建map

// 使用make创建map
robotName := make(map[string]string)

// 通过字面值创建map,同时还能初始化一系列键值对
robotName := map[string]string{
    "robot01": "Alice",
    "robot02": "Jack",
    "robot03": "Tom",
}

map的增删改查

// 新增map元素
robotName["robot04"] = "Cindy"
// 访问map中元素
fmt.Println(robotName["robot01"]) // robot01 : Alice
// 查询map中元素个数
fmt.Println(len(robotName)) // 4
// 删除map中元素
delete(robotName, "robot03")
// 判断是否有这个元素,ok是bool类型,如果有返回true,反之返回false
name, ok := robotName["robot0"]
fmt.Println(name) // Alice
fmt.Println(ok) // true

map的遍历

​ 要想遍历map中全部的key/value对的话,可以使用range风格的for循环实现,和之前的slice遍 历语法类似。但是,Map的迭代顺序是不确定的,并且不同的哈希函数实现可能导致不同的遍历顺序。

// 通过range循环遍历map
for index, value := range robotName {
    fmt.Println(index + " : " + value)
}
/*
robot01 : Alice
robot02 : Jack
robot04 : Cindy
*/

嵌套map

​ Map的value类型也可以是一个聚合类型,比如是一个map或slice,

// 声明嵌套map
robotInfo := map[string]map[string]string{}
// 因为上面的声明语句只分配了外层空间,所以需要通过make分配内层空间
// 写法1
robotInfo["robot01"] = make(map[string]string)
robotInfo["robot01"]["name"] = "Alice"
robotInfo["robot01"]["age"] = "18"
// 写法2
robotInfo["robot02"] = map[string]string{
    "name": "Bob",
    "age":  "20",
}
// 遍历嵌套map
for index1, value1 := range robotInfo {
    for index2, value2 := range value1 {
        fmt.Println(index1 + " : " + index2 + " : " + value2)
    }
}
标签: golang
最后更新:2023年5月10日

大明

靠写代码养家的开发者。

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2023 疯狂编程网. ALL RIGHTS RESERVED.

京ICP备2022013580号-1