首页 > 其他分享 >由浅到深认识Go语言(9):map

由浅到深认识Go语言(9):map

时间:2024-04-03 09:30:43浏览次数:22  
标签:map 语言 int fmt var Go main string

该文章Github地址:https://github.com/AntonyCheng/go-notes【有条件的情况下推荐直接访问GitHub以获取最新的代码更新】

在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template【有条件的情况下推荐直接访问GitHub以获取最新的代码更新】& CSDN文章地址:https://blog.csdn.net/AntonyCheng/article/details/136555245),该模板集成了最常见的开发组件,同时基于修改配置文件实现组件的装载,除了这些,模板中还有非常丰富的整合示例,同时单体架构也非常适合SpringBoot框架入门,如果觉得有意义或者有帮助,欢迎Star & Issues & PR!

上一章:由浅到深认识Go语言(7):数组

10.map

数组和切片的思考

当我们想要查询一个元素是,我们需要知道索引才能找到我们想要找的元素,这样就显得很麻烦,因为我们并不能每次找一个元素都需要把索引熟悉一边,所以引入了键值对的概念;

10.1.map概念

map是一种无序的键值对的集合,map最重要的一点就是通过key来快速检索数据,key就类似于索引,指向数据的值,所以键具有唯一性;

10.2.map创建与初始化

map创建:创建和声明不一样,创建是指声明并且初始化为空,map类型第一步一定是创建;

//map创建有以下三种方式
//1.var map名 map[键的类型]值的类型 = map[键的类型]值的类型{}
//2.map名 := map[键的类型]值的类型{}
//3.map名 := make(map[键的类型]值的类型,map容量)  map容量一般不设置
package main

import "fmt"

func main() {
	var mapName1 map[int]string = map[int]string{}
	fmt.Println("mapName1 =", mapName1)

	mapName2 := map[int]string{}
	fmt.Println("mapName2 =", mapName2)

	mapName3 := make(map[int]string)
	fmt.Println("mapName3 =", mapName3)
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

map初始化:

package main

import "fmt"

func main() {
   var mapName1 map[int]string = map[int]string{1: "张三", 2: "李四", 3: "王五", 4: "Antony"}
   fmt.Println("mapName1 =", mapName1)

   mapName2 := map[int]string{1: "张三", 2: "李四", 3: "王五", 4: "Antony"}
   fmt.Println("mapName2 =", mapName2)

   mapName3 := make(map[int]string)
   mapName3[1] = "张三"
   mapName3[2] = "李四"
   mapName3[3] = "王五"
   mapName3[4] = "Antony"
   fmt.Println("mapName3 =", mapName3)
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

10.3.键值操作

通过Key获取值

基本格式:

map名[键]

示例如下:

package main

import "fmt"

func main() {
   var mapName1 map[int]string = map[int]string{1: "张三", 2: "李四", 3: "王五", 4: "Antony"}
   fmt.Println(mapName1[1])
}

通过Key获取值时,判断其是否存在

基本格式:

变量1,变量2 := map名[键]
//如果该键所对应的值存在,那么变量1中存储对应值,并且变量2的值变为true;
//如果该键所对应的值不存在,那么变量1中存储为空,并且变量2的值变为false;

示例如下:

package main

import "fmt"

func main() {
   var mapName1 map[int]string = map[int]string{1: "张三", 2: "李四", 3: "王五", 4: "Antony"}
   var v1, b1 = mapName1[1]
   var v2, b2 = mapName1[100]
   fmt.Printf("mapName[1] ==> %s : %t\n", v1, b1)
   fmt.Printf("mapName[2] ==> %s : %t\n", v2, b2)
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过循环方式获取值

package main

import "fmt"

func main() {
   var mapName map[int]string = map[int]string{1: "张三", 2: "李四", 3: "王五", 4: "Antony"}
   for k, v := range mapName {
      fmt.Printf("%d: %s\n", k, v)
   }
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过Key删除某个值

package main

import "fmt"

func main() {
   var mapName map[int]string = map[int]string{1: "张三", 2: "李四", 3: "王五", 4: "Antony"}
   delete(mapName, 1)
   delete(mapName, 3)
   for k, v := range mapName {
      fmt.Println(k, ":", v)
   }
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

10.4.map作为函数参数

Go语言中map作为函数参数,内容被修改后,会影响原map的内容;

package main

import (
   "fmt"
)

func main() {
   key := 0
   fmt.Println("请输入你要验证的key值:")
   fmt.Scan(&key)
   m := map[int]string{1: "张三", 2: "李四"}
   exists, result := checkExists(m, key)
   fmt.Println(exists, ":", result)
}

func checkExists(m map[int]string, key int) (bool, string) {
   var v, b = m[key]
   if b {
      return b, v
   } else {
      return b, "null"
   }
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

10.5.map案例

案例一:

有一个英文字符串,统计每个字母出现的次数;

package main

import "fmt"

func main() {
   str := ""
   fmt.Println("请输入英文字符串:")
   fmt.Scan(&str)
   m := map[byte]int{}
   for _, v := range str {
      var _, b = m[byte(v)]
      if b {
         m[byte(v)] = m[byte(v)] + 1
      } else {
         m[byte(v)] = 1
      }
   }
   for k, v := range m {
      fmt.Printf("%c : %d\n", k, v)
   }
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

标签:map,语言,int,fmt,var,Go,main,string
From: https://blog.csdn.net/AntonyCheng/article/details/137327814

相关文章

  • 使用QuerryMapper条件查询器进行分页模糊查询,当想要渲染的数据需要两张表的字段该如何
    假如我们想要拿到新闻表的所有数据和发布新闻的用户名称的数据1.创建两张表,其中新闻表的authorId引用用户表的外键id,(这是一张新闻表)(这是一张用户表)author不在这个数据库表中,使用@TableField(exist=false)这个注解,表示这个字段不在新闻表里,用于业务处理。2.拿到分页......
  • 2024年最新github之Javascript语言开源项目top50排行榜项目
    如果有帮助到您还请动动手帮忙点赞,关注,评论转发,感谢啦!......
  • MongoDB用户权限管理,设置密码并连接
    MongoDB用户权限管理,设置密码并连接如何设置密码在服务启动状态下,在命令行中输入mongo;首先设置admin表的用户(必须,否则单独设置表用户无用),先执行useadmin,再执行db.createUser({user:'root',pwd:'123456',roles:['root']}),此时会创建一个名为root,密码为123456,角色为root的用......
  • R语言GARCH模型对股市sp500收益率bootstrap、滚动估计预测VaR、拟合诊断和蒙特卡罗模
    原文链接:http://tecdat.cn/?p=26271最近我们被客户要求撰写关于GARCH的研究报告,包括一些图形和统计输出。Box等人的开创性工作(1994)在自回归移动平均模型领域的相关工作为波动率建模领域的相关工作铺平了道路,分别由Engle(1982)和Bollerslev(1986)引入了ARCH和GARCH......
  • mongodb连接字符串
    mongodb://localhost:27017mongodb://root:123456@localhost:27017/testdb?authSource=admin1、连接本地数据库服务器,端口是默认的。mongodb://localhost2、使用用户名fred,密码foobar登录localhost的admin数据库。mongodb://fred:foobar@localhost3、使用用户名fred,密码fo......
  • 前端开发语言有哪些
    前端开发语言有哪些在数字时代,前端开发已经成为软件开发领域的一个重要分支。前端开发主要关注的是用户界面(UI)和用户体验(UX),而实现这些的关键在于选择适合的前端开发语言。本文将详细介绍前端开发中常用的几种语言,包括HTML、CSS、JavaScript,以及近年来兴起的TypeScript和一些相......
  • 从零开始学c语言(6)
    if语句 例一#include<stdio.h>intmain(){   intyear;   printf("输入年份:");   scanf("%d",&year);   if(year%4==0&&year%4==0||year%100==0)   printf("%d是闰年",year);   return0;} 例二#include<stdio......
  • Go - Using Reflection
    Reflectioncanbeusedtoinspectthetypeofvariablesandtodynamicallyaccessandmodifytheirvalues.Followingisasimpleexampleofusingreflectiontoinspectavariable'stype: funcmain(){v1:=42inspectVariable(v1)v2:......
  • vim脚本的语言语法
    本文结构:a、简介b、Vim脚本语言的一些基本语法和概念a、Vim脚本语言(Vimscript)是Vim编辑器用于自动化任务和扩展功能的脚本语言。Vimscript提供了一套丰富的命令、函数和变量,允许用户自定义快捷键、映射、插件和更多高级功能。b、下面是 Vim脚本语言的一些基本语法和......
  • MIT 6.S081入门lab10 mmap
    MIT6.S081入门lab10mmap一、参考资料阅读与总结1.JournalingtheLinuxext2fsFilesystem文件系统可靠性:磁盘崩溃前数据的稳定性;故障模式的可预测性;操作的原子性-论文核心:将日志事务系统加入Linux的文件系统中;事务系统的要求:元数据的更新;事务系统的顺序性;数据块写入磁......