当前位置: 首页 > news >正文

【Golang】Go语言Map数据类型

Go语言Map数据类型

文章目录

  • Go语言Map数据类型
    • 一、Map
      • 1.1.1、map定义
      • 1.1.2、map的基本使用
      • 1.1.3、判断某个键是否存在
      • 1.1.4、map的遍历
      • 1.1.5、使用delete()函数删除键值对
      • 1.1.6、按照指定顺序遍历map
      • 1.1.7、元素为map类型的切片
      • 1.1.8、值为切片类型的map

一、Map

  • map是一种无序的基本key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用。

1.1.1、map定义

  • Go语言中map的定义语法如下
map[keytype]valuetype
  • 其中
keytype: 表示键的类型
valuetype: 表示值的类型
  • map类型的变量默认初始值为nil,需要使用make()来分配内存。
  • 语法如下
make(map[keytype]valuetype, [cap])
  • 其中cap表示map的容量,该参数虽然不是必须的,但是我们应该在初始化map的时候就为其执行一个合适的容量。

1.1.2、map的基本使用

  • map中的数据都是成对出现的,map的基本使用示例代码如下:
func main() {scoreMap := make(map[string]int, 8)scoreMap["张三"] = 90scoreMap["小明"] = 100fmt.Println(scoreMap)fmt.Println(scoreMap["小明"])fmt.Printf("tyoe of a:%T\n", scoreMap)}
  • 结果如下
map[小明:100 张三:90]
100
tyoe of a:map[string]int
  • map也支持在声明的时候填充元素,例如
func main() {userInfo := map[string]string{"username": "admin","password": "admin@123",}fmt.Println(userInfo)  // map[password:admin@123 username:admin]fmt.Println(userInfo["username"])  // admin fmt.Println(userInfo["password"])  // admin@123}

1.1.3、判断某个键是否存在

  • Go语言中有个判断map中键是否存在的特俗写法,格式如下:
# value: 将会获得这个map的值
# ok: 如果key存在那么ok的值就是true否者为false
value, ok := map[key]
  • 举个例子:
func main() {userInfo := map[string]string{"username": "admin","password": "admin@123",}// 如果key存在ok为true, v为对应key的值; 不存在ok为false, v为值类型的零值v, ok := userInfo["username"]if ok {fmt.Println(v)} else {fmt.Println("查无此人")}}

1.1.4、map的遍历

  • Go语言中使用for range遍历map
func main() {scoremap := make(map[string]int)scoremap["张三"] = 90scoremap["小明"] = 100scoremap["王五"] = 60for k, v := range scoremap {fmt.Printf("key: %s value: %d\n", k, v)}}
  • 但我们只想遍历key的时候,可以按照下面的写法:
func main() {scoremap := make(map[string]int)scoremap["张三"] = 90scoremap["小明"] = 100scoremap["王五"] = 60for k := range scoremap {fmt.Printf(k)}}
  • 注意:遍历map时的元素顺序与添加键值对的顺序毫无关系

1.1.5、使用delete()函数删除键值对

  • 使用delete()内建函数从map中删除一组键值对,delete()函数的格式如下:
delete(map, key)
  • 其中
map: 表示要删除键值对的map
key: 表示要删除的键值对的key
  • 示例代码如下
func main() {scoremap := make(map[string]int)scoremap["张三"] = 90scoremap["小明"] = 100scoremap["王五"] = 60delete(scoremap, "小明")for k, v := range scoremap {fmt.Printf(k, v)}}

1.1.6、按照指定顺序遍历map

func main() {rand.Seed(time.Now().UnixNano()) // 初始化随机种子var scoreMap = make(map[string]int, 200)for i := 0; i < 100; i++ {key := fmt.Sprintf("stu%02d", i) // 生成stu开发的字符串value := rand.Intn(100)          // 生成0-99的随机整数scoreMap[key] = value}// 取出map中的所有key存入切片keysvar keys = make([]string, 0, 200)for key := range scoreMap {keys = append(keys, key)}// 对切片进行排序sort.Strings(keys)for _, key := range keys {fmt.Println(key, scoreMap[key])}}

1.1.7、元素为map类型的切片

  • 下面的代码演示了切片中的元素为map类型时的操作
func main() {// 使用make初始化一个map类型的切片var mapSlice = make([]map[string]string, 3)for index, value := range mapSlice {fmt.Printf("index: %d value: %v\n", index, value)}fmt.Println("init data")// 在mapSlice这个切片的第0个位置, 创建一个容量为10的map,并进行赋值mapSlice[0] = make(map[string]string, 10)mapSlice[0]["name"] = "王五"mapSlice[0]["password"] = "123456"mapSlice[0]["address"] = "红旗大街"for index, value := range mapSlice {fmt.Printf("index: %d value: %v\n", index, value)}}

1.1.8、值为切片类型的map

  • 下面的代码演示了map中值为切片类型的操作
func main() {var sliceMap = make(map[string][]string, 3)fmt.Println(sliceMap)fmt.Println("init data")key := "中国"value, ok := sliceMap[key]if !ok {value = make([]string, 0, 2)}value = append(value, "北京", "上海")sliceMap[key] = valuefmt.Println(sliceMap)
}
http://www.xdnf.cn/news/1208791.html

相关文章:

  • 随缘玩 一: 代理模式
  • 计算器4.0:新增页签功能梳理页面,通过IO流实现在用户本地存储数据
  • MySQL数据库 mysql常用命令
  • 再谈亚马逊云科技(AWS)上海AI研究院7月22日关闭事件
  • 实现视频实时马赛克
  • P1098 [NOIP 2007 提高组] 字符串的展开
  • python案例:基于python 神经网络cnn和LDA主题分析的旅游景点满意度分析
  • 小程序中事件对象的属性与方法
  • 微算法科技(NASDAQ:MLGO)应用区块链联邦学习(BlockFL)架构,实现数据的安全传输
  • Django自带的加密算法
  • 3D游戏引擎的“眼睛“:相机系统深度揭秘与技术实现
  • 14、distance_object_model_3d算子
  • 如何用命令行快速提取PPT中的所有图片?
  • 线程崩溃是否导致进程崩溃
  • 【嵌入式电机控制#18】有刷直流串级控制
  • MySQL图解索引篇
  • 大模型技术对部分岗位的影响
  • Apache Ignite 的分布式原子类型(Atomic Types)
  • 在CSS中,如果你想设置一个元素的高度(height)与其宽度(width)相匹配,但又希望宽度使用百分比来定义,你可以通过几种方式来实现。
  • 试用SAP BTP 02C:试用SAP HANA Schemas HDI Containers
  • VSCode使用Code Runner运行C/C++输出[Done] exited with code=0 in xxx seconds
  • SpringBoot整合RocketMQ(rocketmq-client.jar)
  • C++ AI流处理核心算法实战
  • MOGA(多目标遗传算法)求解 ZDT1 双目标优化问题
  • 沪铝本周想法
  • 智能编队重构职场生态:Agentic AI 协同时代来临
  • 基于Blazor进销存管理系统
  • 对College数据进行多模型预测(R语言)
  • thingsboard 自定义动作JS编程
  • 【高阶版】R语言空间分析、模拟预测与可视化高级应用