当前位置: 首页 > 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…...

Git详解

Git1.Git简介1.1 Git是什么1.2 Git的作用1.3 Git的简介1.4 Git的下载和安装1.5 Git的安装目录结构如下2.Git代码托管服务2.1 常用的Git代码托管服务1.Git简介 1.1 Git是什么 Git是一个分布式版本控制工具&#xff0c;主要用于管理开发过程中的源代码文件&#xff08;Java类、x…...

003__JAVA模板方法-设计模式

模板方法 定义&#xff1a;定义了一个算法的骨架&#xff0c;并允许子类为一个或多个步骤提供实现 举个例子&#xff0c;把大象放进冰箱分几步&#xff0c;第一打开冰箱&#xff0c;第二打大象放进冰箱&#xff0c;第三把冰箱关闭。这三个步骤就可以用模板方法的设计模式。 …...

Springboot项目集成Netty组件

系列文章目录 Springboot项目集成Netty组件 Netty新增解析数据包指定长度功能 文章目录系列文章目录前言一、Netty是什么&#xff1f;二、使用步骤1. 项目引入依赖1.1 项目基础版本信息&#xff1a;1.2 Netty依赖2. 项目配置2.1 在 yml 配置文件中配置以下&#xff1a;2.2 创建…...

python 中的import cfg问题

pip install cfg 报错: ERROR: Could not find a version that satisfies the requirement cfg (from versions: none) ERROR: No matching distribution found for cfg 要使用pip install cfg2才行...

[oeasy]python0088_字节_Byte_存储单位_KB_MB_GB_TB

编码进化 回忆上次内容 上次 回顾了 字符大战的结果 ibm 曾经的 EBCDIC 由于字符不连续的隐患 导致后续 出现 无数问题无法补救 7-bit 的 ASA X3.4-1963 字母序号连续 比较字符时 效率高判断字符 是否是字母 也很容易 获得了 IBM以外公司的 支持 为什么 ASA X3.4-1963 是 7…...

vue3.0 生命周期

目录前言&#xff1a;vue3.0生命周期图例1.beforeCreate2.created3.beforeMount/onBeforeMount4.mounted/onMounted5.beforeUpdate/onBeforeUpdate6.updated/onUpdated7.beforeUnmount/onBeforeUnmount8.unmounted/onUnmounted案例&#xff1a;总结前言&#xff1a; 每个Vue组…...

CGAL 数字类型

文章目录 一、简介二、内置数字类型三、CGAL中的数字类型参考资料一、简介 在CGAL汇总,数字类型必须满足特定的语法和语义要求,这样它们才能在CGAL代码中成功使用。一般来说,它们往往是代数结构概念的模型,如果它们对实数的子集模型,那么它们就也是RealEmbeddable模型。 二…...

如何将Python打包后的exe还原成.py?

将python打包好的exe解压为py文件&#xff0c;步骤如下&#xff1a;下载pyinstxtractor.py文件下载地址&#xff1a;https://nchc.dl.sourceforge.net/project/pyinstallerextractor/dist/pyinstxtractor.py并将pyinstxtractor.py放到和exe相同的目录文件下打开命令控制台cd 进…...

CJSON简单介绍

json简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集&#xff0c;最新的定义可以参考ECMA-404_2nd_ed…...

算法训练营 day49 动态规划 爬楼梯 (进阶)零钱兑换 完全平方数

算法训练营 day49 动态规划 爬楼梯 &#xff08;进阶&#xff09;零钱兑换 完全平方数 爬楼梯 &#xff08;进阶&#xff09; 70. 爬楼梯 - 力扣&#xff08;LeetCode&#xff09; 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同…...

旅游响应式网站建设/百度爱采购推广平台

我目前正在开发一个.NET Core库,我将在另一个项目中用作NuGet包.我已经能够使用项目目录中的“dotnet pack”命令成功打包项目,并将该程序包上传到MyGet.我更喜欢使用“nuget push”命令自动执行推送NuGet包的过程.我的问题是project.json文件中定义的“scripts”属性似乎不在包…...

wordpress 自动换行/企业培训内容包括哪些内容

小米手机网速慢是怎么回事使用手机的时候&#xff0c;我们有可能会感到手机网速很慢。那么小米手机网速慢是怎么回事呢?下面就让jy135小编来告诉大家吧&#xff0c;欢迎阅读。小米手机上网慢情况一&#xff1a;负荷上传在满速上传(包括P2P后台上传或用户主动上传)的时候&#…...

西安网站推广/网站推广的基本手段有哪些

转载于:https://www.cnblogs.com/6DAN_HUST/archive/2013/01/18/2866932.html...

可以做兼职的动漫网站/关键词查网址

数据定义语言DDLData Definition Language-数据定义语言&#xff1a;create / drop / alter 创建数据库 create database school default charset utf8mb4;create database:固定写法school:库名default charset:设置默认的字符集utf8mb4:库中数据的格式&#xff0c;最大4字节的…...

如何自己建立网站/公司如何在百度宣传

Dubbo自定义Filter统一处理异常参考文章&#xff1a; &#xff08;1&#xff09;Dubbo自定义Filter统一处理异常 &#xff08;2&#xff09;https://www.cnblogs.com/gossip/p/11734654.html 备忘一下。...

宁波网站建设-中国互联/网络软文营销案例

在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分。如果你想获得任何股票投资银行的前台资讯职位&#xff0c;那么你应该准备很多关于多线程的问题。在投资银行业务中多线程和并发是一个非常受欢迎的话题&#xff0c;特别是电子交易发展方面相关的。他们会问面试…...