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

32-Golang中的map

Golang中的map

    • 基本介绍
    • 基本语法
      • map声明的举例
    • map使用的方式
    • map的增删改查操作
      • map的增加和更新
      • map的删除
      • map的查找
    • map的遍历
    • map切片
      • 基本介绍
    • map排序
    • map的使用细节

基本介绍

map是key-value数据结构,又称为字段或者关联数组。类似其它编程语言的集合,在编程中是经常使用到的7

基本语法

var map变量名 map[keytype]valuetype

  • key可以是什么类型:golang中的map的key可以是很多种类型,比如bool,数字,string,指针,channel,还可以是值包含前面几个类型的接口,结构体,数组,通常为int,string。value的类型和key基本一样,通常为数字,string,map,struct。
  • 注意:slice,map还有function不可以,因为这几个没法用 ==来判断

map声明的举例

var a map[string]sting

var a map[string]int

var a map[int]sting

var a map[string]map[sting]string

注意:声明是不会分配内存的,初始化需要make,分配内存后才能赋值和使用。

package main
import ("fmt"
)func main() {//map的声明和注意事项var a map[string]string//在使用map,需要先make,make的作用就给map分配给map分配数据空间a = make(map[string]string)a["no1"] = "kunkun"a["no2"] = "kun"a["no3"] = "heizi"a["no1"] = "kun"fmt.Println(a)
}//map[no1:kun no2:kun no3:heizi]

说明:

  • 1.map在使用前一定要make
  • 2.map的key是不能重复,如果重复了,则以最后这个key-value为准
  • 3.map的value是可以相同的
  • 4.map的key-value是无序的
  • 5.make在映射中的说明:初始分配的创建取决于size,但产生的映射长度为0.size可以省略,这种情况下就会分配一个小的起始大小

map使用的方式

package main
import ("fmt"
)func main() {//第一种方式,先声明再makevar a map[string]string//在使用map,需要先make,make的作用就给map分配给map分配数据空间a = make(map[string]string)a["no1"] = "kunkun"a["no2"] = "kun"a["no3"] = "heizi"a["no1"] = "kun"fmt.Println(a)//第二种方式,声明就直接makecities := make(map[string]string)cities["no1"] = "changshang"cities["no2"] = "beijing"cities["no3"] = "shanghai"fmt.Println(cities)//第三种方式声明直接赋值heroes := map[string]string{"hero1" : "jingze", "hero3" : "wang", "hero2" : "kun", }fmt.Println("heroes=", heroes)
}/*
map[no1:kun no2:kun no3:heizi]
map[no1:changshang no2:beijing no3:shanghai]
heroes= map[hero1:jingze hero2:kun hero3:wang]
*/

map的增删改查操作

map的增加和更新

map[“key”] = value //如果可以还没有,就是增加,如果key存在就是修改

在这里插入图片描述

map的删除

  • delete(map,“key”),delete是一个内置函数,如果key存在,就删除该key-value,如果key不存在,不操作,但是也不会报错
  • 如果我们要删除map所有地key,没有一个专门的方法一次删除,可以遍历一下key,逐个删除
  • 或者map=make(…),make一个新的,让原来的成为垃圾,被gc回收

在这里插入图片描述

map的查找

package main
import ("fmt"
)func main() {cities := make(map[string]string)cities["no1"] = "changshang"cities["no2"] = "beijing"cities["no3"] = "shanghai"val, ok := cities["no1"]if ok{fmt.Println("找到了cities=", val)} else {fmt.Println("没有找到这个可以")}}//找到了cities= changshang

map的遍历

map的遍历使用for-range的结构遍历

package main
import ("fmt"
)func main() {cities := make(map[string]string)cities["no1"] = "changshang"cities["no2"] = "beijing"cities["no3"] = "shanghai"for k, v := range cities{fmt.Printf("k=%v v=%v\n",k,v)}
}/*
k=no1 v=changshang
k=no2 v=beijing
k=no3 v=shanghai
*/

map切片

基本介绍

切片 数据类型如果是map,我们称为slice of map,map切片,这样使用则map个数就可以动态变化了。

package main
import ("fmt"
)func main() {var monsters []map[string]stringmonsters = make([]map[string]string, 2)if monsters[0] == nil{monsters[0] = make(map[string]string,2)monsters[0]["name"] = "kunkun"monsters[0]["age"] = "38"}if monsters[1] == nil{monsters[1] = make(map[string]string,2)monsters[1]["name"] = "kun"monsters[1]["age"] = "18"}//动态的增加monster//先定义一个monster信息newMonster := map[string]string{"name" : "heizi","age" : "45",}monsters = append(monsters, newMonster)fmt.Println(monsters)
}//[map[age:38 name:kunkun] map[age:18 name:kun] map[age:45 name:heizi]]

map排序

  • 1.golang中没有一个专门的方法针对map的key进行排序
  • 2.golang中的map默认时无序的没注意也不是按照添加的顺序存放的,每次遍历得到的输出结果可能不一样
  • 3.golang中的map排序,是先将key进行排序,然后根据key值遍历输出即可
package main
import ("fmt""sort"
)func main() {//map的排序map1 := make(map[int]int, 10)map1[10] = 100map1[1] = 13map1[4] = 56map1[8] = 90fmt.Println(map1)//如果按照map的key的顺序进行排序输出//1.先将map的key放入到切片中//2.对切片排序//3.遍历切片,然后按照key来输出map的值var keys []intfor k, _ := range map1 {keys = append(keys, k)}//排序sort.Ints(keys)fmt.Println(keys)for _, k := range keys{fmt.Printf("map1[%v=%v \n", k, map1[k])}
}/*
map[1:13 4:56 8:90 10:100]
[1 4 8 10]
map1[1=13
map1[4=56
map1[8=90
map1[10=100
*/

map的使用细节

  • 1.map是引用类型,遵守引用类型传递的机制,在一个函数接受map,修改后,会直接修改原来的map
  • 2.map的容量达到后,再想map增加元素,会自动扩容,并不会发生panic,也就是说map能动态的增长键值对
  • 3.map的value也经常使用struct类型,(比前面value是一个map更好)比如value为Student结构体

相关文章:

32-Golang中的map

Golang中的map基本介绍基本语法map声明的举例map使用的方式map的增删改查操作map的增加和更新map的删除map的查找map的遍历map切片基本介绍map排序map的使用细节基本介绍 map是key-value数据结构,又称为字段或者关联数组。类似其它编程语言的集合,在编程…...

LeetCode-384-打乱数组

1、列表随机 为了能够初始化数组,我们使用nums保存当前的数组,利用orignal保存初始化数组。为了实现等可能随机打乱,考虑到随机数本质上是基于随机数种子的伪随机,我们采用如下的方式实现等可能随机:我们将所有元素压…...

九龙证券|重大利好!期货公司打新再“解绑”:可直接参与首发网下配售!

时隔近7年,期货公司及其财物办理子公司参加首发证券网下询价和配售事务再次“解绑”。 2月17日,为适应全面实行股票发行注册制变革需求,中国证券业协会(以下简称中证协)发布《初次公开发行证券网下出资者办理规矩》&am…...

信号完整性设计规则之串扰最小化

本文内容从《信号完整性与电源完整性分析》整理而来,加入了自己的理解,如有错误,欢迎批评指正。 1. 对于微带线和带状线,保持相邻信号路径的间距至少为线宽的2倍。 减小串扰的一种方式就是增大线间距,使线间距等于线…...

Windows Ubuntu双系统 设置时间同步方式

文章目录0 前言1 系统时间机制1.1 Windows时间机制1.2 Ubuntu时间机制2 设置Ubuntu的时间机制3 参考0 前言 在安装windows与ubuntu的双系统之后,会发现两个系统的时间不一致,如果使用了Ubuntu之后,再使用windows就会发现时间变早。原因是两个…...

【python】英雄联盟电竞观赛引擎 掉落提示 CapsuleFarmerEvolved 「Webhook」「钉钉」

介绍 本项目链接 Github本项目链接 Gitee本项目链接 最近在github上发现一个可以用来自动帮你挂英雄联盟(除国服)电竞引擎(可以开出头像和表情)的项目,CapsuleFarmerEvolved,github原项目链接简单来说就是本来是通过看比赛获取奖励的,它帮助你进行观看. 对这个活动有兴趣的话…...

加油站会员管理小程序实战开发教程11

我们已经用了10篇的篇幅讲解了首页的功能,首页主要是用来展示信息的。那么接下来就要进入我们的功能页面了,会员管理一个比较重要的功能是充值的功能。 要想实现充值功能,首先需要办一张会员卡,那什么时候办理会员卡呢?需要先注册成为会员,然后进行开卡的动作。这里要注…...

Python量化入门:投资的风险有哪些?

‍ 在金融资产中,风险是指获得收益的不确定性,通常以实际收益与期望收益的偏离来表示。 影响资产收益的因素有很多,而且不同资产面对的风险也不尽相同,在详细介绍风险度量之前,我们有必要了解一下风险的来源。 资产风险的来源 1. 市场风险 市场风险就是我们常说的系统…...

AV1编码标准整体概述

本专栏预计将从如下几方面详细介绍AV1 (1)从AV1的发展历史,AV1与MPEG、AVS系列的异同。 (2)AV1标准支持的传统编码工具及引入的机器学习工具 (3)开源的AV1编码器及解码器原理详解 (4)AV1的生态 一、AV1产生背景 2010年,谷歌收购了一家叫On2 Technologies的公司。那时VP8…...

基于springboot+vue的药物咨询平台

基于springbootvue的药物咨询平台 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍&…...

第64章 SQL 主机教程

如果大神想要大神的网站存储数据在database并从database显示数据,大神的 Web server 必须能使用 SQL 语言访问database系统。 如果大神的 Web server 托管在互联网服务提供商(ISP,全称 Internet Service Provider),大…...

【软件测试】python接口自动化测试编写脚本,资深测试总结方法,你的实用宝典......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 接口测试&#xff0…...

MathType公式编辑器过期(禁止联网)的解决方案

MathType公式编辑器过期(禁止联网)的解决方案 Mathtype公式编辑器无法使用解决方案 MathType联网后显示证书失效,需要重新认证或者购买。或者是MathType成了精简版,只剩两行了。 1. 打开控制面板 方法1 首先大家在电脑中打开W…...

电子技术——共栅和共源共栅放大器的高频响应

电子技术——共栅和共源共栅放大器的高频响应 我们在之前学过无论是是CS放大器还是CE放大器,都可以看做是一个带通(IC低通)滤波器。在高频处的响应收到输入电容 CinC_{in}Cin​ 的限制(主要是米勒效应)。因此&#xff…...

基于jsplumb构建的流程设计器

项目背景 最近在准备开发工作流引擎相关模块,完成表结构设计后开始着手流程设计器的技术选型,调研了众多开源项目后决定基于jsplumb.js开源库进行自研开发,保证定制化的便捷性,相关效果图及项目地址如下 项目地址:ht…...

解析从Linux零拷贝深入了解Linux-I/O(下)

接上文解析从Linux零拷贝深入了解Linux-I/O(上) 大文件传输场景 零拷贝还是最优选吗 在大文件传输的场景下,零拷贝技术并不是最优选择;因为在零拷贝的任何一种实现中,都会有「DMA 将数据从磁盘拷贝到内核缓存区——P…...

【学习笔记2.19】动态规划、MySQL、Linux、Redis(框架)

动态规划 343整数拆分 class Solution {public int integerBreak(int n) {int dp [] new int [n 1];//dp[i]:正整数i拆分后的最大乘积dp[2] 1;for(int i 2;i < n ;i ){for(int j 1;j < i;j ){dp[i] Math.max(dp[i],Math.max(j * (i - j),j * dp[i - j]));} …...

String intern方法理解

1、原理 参考学习视频&#xff1a; https://www.bilibili.com/video/BV1WK4y1M77t/?spm_id_from333.337.search-card.all.click&vd_source4dc3f886f5ce1d43363b603935f02bd1 String s1 “hello”; String s1 "hello"; 代码原理解释如下图String s1 new Str…...

解决 cocosjs与安卓原生集成 崩溃问题

版本:cocos2dx3.16 背景&#xff1a;公司需要把游戏整合到一个APP里面。于是打算通过activity切换的方式实现。但是游戏退出重进之后总会出现fatal 11线程报错。于是有了以下修改。我是底层小白。折腾了好久总算鼓捣出一个能用的版本。优化的地方应该有很多。不过就没去好好优…...

spring注解方式整合Dubbo

系列文章目录 文章目录系列文章目录一、创建一个父工程项目二、创建子模块(dubbo-api模块)二、创建子模块(dubbo-provider模块)三、创建子模块(dubbo-consumer模块)总结一、创建一个父工程项目 这里我们通过Spring Initializer 来帮我们构建一个spring-dubbo这个父项目,点击nex…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

PHP 8.5 即将发布:管道操作符、强力调试

前不久&#xff0c;PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5&#xff01;作为 PHP 语言的又一次重要迭代&#xff0c;PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是&#xff0c;借助强大的本地开发环境 ServBay&am…...