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

编程笔记 Golang基础 024 映射

编程笔记 Golang基础 024 映射

  • 一、映射
  • 二、映射的定义与初始化
  • 三、基本操作
  • 四、综合示例程序

Go语言中的映射(map)是一种关联数组或哈希表数据结构,它存储键值对,其中每个键都是唯一的。在Go中,你可以使用 map[keyType]valueType来声明一个映射。

一、映射

在Go语言中,映射(map)是一种内置的数据结构,它提供了一种关联键值对的方式,允许通过唯一的键(key)来存储和检索对应的值(value)。映射中的键是唯一的,并且用于快速查找相关联的值。这种数据结构常被称为关联数组、哈希表或字典,在其他编程语言中也有类似的概念。

Go语言中的映射定义语法如下:

map[keyType]ValueType

例如,创建一个存储字符串到整数的映射:

var m map[string]int

使用映射时需要注意以下几点:

  • 映射在使用前必须初始化(可以通过 make 函数或者直接声明并初始化),否则会引发运行时错误。
  • 映射的键必须是可比较类型,也就是说,它们需要支持相等性判断操作(== 和 !=)。
  • 映射是无序的,因此不能保证迭代顺序的一致性。
  • Go 语言中的映射实现了高效的查找、插入和删除操作,这些操作的时间复杂度通常接近 O(1)。

示例代码:

// 初始化一个映射
m := make(map[string]int)// 插入键值对
m["apple"] = 1
m["banana"] = 2// 根据键查找值
value, ok := m["apple"]
if ok {fmt.Println("The value for key 'apple' is", value)
} else {fmt.Println("Key 'apple' not found")
}// 删除键值对
delete(m, "banana")

在这个例子中,“ok”是一个布尔值,表示查找是否成功找到指定的键。如果键存在,则“ok”为true,同时返回相应的值;如果键不存在,则“ok”为false,返回的值为零值。

二、映射的定义与初始化

// 定义并初始化一个字符串到整数的映射
var numbers map[string]int = map[string]int{"one": 1, "two": 2, "three": 3}// 或者直接初始化而不声明变量类型
numbers := map[string]int{"one": 1, "two": 2, "three": 3}// 使用make函数创建一个新的映射(推荐方式)
numbers := make(map[string]int)
numbers["one"] = 1
numbers["two"] = 2
numbers["three"] = 3

三、基本操作

  • 插入和访问元素:
numbers["four"] = 4 // 插入新的键值对
value, exists := numbers["one"] // 访问元素,exists为bool型,表示键是否存在
if exists {fmt.Println("The value of 'one' is", value)
}
  • 删除元素:
delete(numbers, "two") // 删除键为"two"的键值对
  • 遍历映射:
for key, value := range numbers {fmt.Printf("Key: %s, Value: %d\n", key, value)
}

四、综合示例程序

下面是一个综合应用的示例程序,该程序创建了一个学生姓名到分数的映射,并实现了添加、查询、删除和遍历操作:

package mainimport ("fmt"
)func main() {// 初始化一个映射scores := make(map[string]int)// 添加一些学生的分数scores["Alice"] = 95scores["Bob"] = 85scores["Charlie"] = 90// 查询并打印某个学生的分数if score, ok := scores["Alice"]; ok {fmt.Printf("Alice's score is %d.\n", score)} else {fmt.Println("Alice is not in the records.")}// 更新一个学生的分数scores["Bob"] = 90// 删除一个学生记录delete(scores, "Charlie")// 遍历并打印所有学生的分数fmt.Println("All students' scores:")for name, score := range scores {fmt.Printf("%s: %d\n", name, score)}
}

在这个示例中,我们首先创建了一个名为scores的映射,用于存储学生姓名及其对应的分数。然后演示了如何向映射中插入数据、通过键查询值、更新现有键的值以及删除键值对。最后,通过range关键字遍历映射并打印所有的学生分数。

http://www.lryc.cn/news/304391.html

相关文章:

  • 基于springboot+vue的中小型医院网站(前后端分离)
  • Spring boot 实现监听 Redis key 失效事件
  • 振动样品磁强计
  • C语言标准库介绍:<string.h>
  • 大语言模型LangChain本地知识库:向量数据库与文件处理技术的深度整合
  • 展厅设计中都包含哪些分区与展示内容
  • 【k8s核心概念与专业术语】
  • 【stm32】hal库学习笔记-UART/USART串口通信(超详细!)
  • 通俗易懂理解GhostNetV1轻量级神经网络模型
  • P8630 [蓝桥杯 2015 国 B] 密文搜索
  • Electron实战之环境搭建
  • 【0259】inval.h/inval.c的理解
  • 力扣爆刷第77天--动态规划一网打尽打家劫舍问题
  • 深入理解C语言(5):程序环境和预处理详解
  • ESP8266智能家居(3)——单片机数据发送到mqtt服务器
  • lvm逻辑卷创建raid阵列(不常用)—— 筑梦之路
  • LayUI发送Ajax请求
  • 平时积累的FPGA知识点(10)
  • 使用Streamlit构建纯LLM Chatbot WebUI傻瓜教程
  • 电脑死机卡住怎么办 电脑卡住鼠标也点不动的解决方法
  • RAG 语义分块实践
  • 12 Autosar_SWS_MemoryMapping.pdf解读
  • 【Linux取经路】文件系统之缓冲区
  • 华为OD机试真题-查找接口成功率最优时间段-2023年OD统一考试(C卷)--Python3--开源
  • 缓存篇—缓存雪崩、缓存击穿、缓存穿透
  • Python实现视频转音频、音频转文本的最佳方法
  • 阿里云SSL免费证书到期自动申请部署程序
  • Vue全局事件防止重复点击(等待请求)【进阶版】
  • C#程序反编译经验总结
  • Android系统启动流程