老奶奶可以看懂系列之---golang的map映射(代码片段)

星际迷航‖ 星际迷航‖     2022-12-04     225

关键词:

前言

这里总结的Golang 笔记只适合有点编程基础的人看,比如Java

往期内容:

  1. Golang学习 【day1】变量、类型
  2. Golang学习,指针,循环控制相关
  3. 循环结构控制、包函数的使用
  4. 异常处理、数组
  5. 老奶奶可以看懂的切片

Map

Go语言中 map 是一种特殊的数据结构,一种元素对的无序集合,对应一个 key(索引)和一个 value(值),所以这个结构也称为关联数组或字典,这是一种能够快速寻找值的理想结构,给定 key,就可以迅速找到对应的 value。
与Java之中Map接口中对应的实现类差不多,HashMap、HashTable等。

Map特点

  • map之前一定需要使用make创建空间。
  • map中key是不能重复的,如果重复会覆盖前一次val存储新的val。
  • map的val是可以相同的。
  • map中的key-val是无序的。
  • 初始分配的创建取决于size,产生映射的长度为0或者size可以省略,这种情况下就会分配一个小的起始的大小,map会自动扩容的。

创建Map的三种方式

Map的创建和使用有以下三种。

func Test1()  
	maps := make(map[string] string)
	maps["陕西"] = "西安"
	maps["山西"] = "太原"
	fmt.Println(maps)


func Test2() 
	maps := map[string]string
		"hero1": "songjiang",
		"hero2": "wusong",
	
	fmt.Println(maps)


func Test3() 
	var maps map[string]int
	maps = make(map[string]int, 10)
	maps["高数"] = 90
	maps["英语"] = 60
	maps["语文"] = 100
	fmt.Println(maps)

Map的增加和删除

Map中增加直接使用maps[“varName”] = val。
Map中删除可以使用内置函数delete,如果对应key不存在的时候,delete的时候也不会报错,存在删除对应的key。
使用mapName[“KeyName”]可以查找Map

func main() 
	add := make(map[string]string)
	add["shanxi"] = "xian"
	add["shan`xi"] = "taiyuan"
	add["fujian"] = "xiameng"
	fmt.Println("原map:", add)
	delete(add, "fujian")
	fmt.Println("delete 之后:", add)
	fmt.Println("map 查找")
	val, ok := add["shanxi"]
	if ok
		fmt.Println(val ," 存在")
	else 
		fmt.Println("val 不存在")
	

Map遍历

使用for-range遍历,map嵌套的话,第一个map的val就是内嵌map,下面介绍嵌套map遍历。

func main() 
	var maps map[string] map[string]string
	maps = make(map[string] map[string]string)
	maps["person1"] = make(map[string]string)
	maps["person1"]["name"] = "wurui"
	maps["person1"]["age"] = "23"
	maps["person1"]["address"] = "baoji"
	maps["person2"] = make(map[string]string)
	maps["person2"]["name"] = "leo"
	maps["person2"]["age"] = "23"
	maps["person2"]["address"] = "xian"
	for k1, v1 := range maps
		for k2, v2 := range v1
			fmt.Println(k1," : ", k2, ":", v2)
		
		fmt.Println("-------------------------")
	

Map和切片一起使用

场景:创建一个[]map[type]type类型的切片,但是每个map元素还是需要进行make。

package main

import "fmt"

func main() 
	var monster []map[string]string
	monster = make([]map[string]string, 2, 5)
	monster[0] = make(map[string]string, 2)
	monster[0]["name"] = "牛魔王"
	monster[0]["age"] = "153"

	monster[1] = make(map[string]string, 2)
	monster[1]["name"] = "白骨精"
	monster[1]["age"] = "123"

	fmt.Println(monster)

	pig := make(map[string]string, 2)
	pig["name"] = "猪八戒"
	pig["age"] = "235"

	// 切片append添加元素
	monster = append(monster, pig)
	fmt.Println(monster)

Map小场景

描述:在一个小系统修改密码为88888888,首先判断有无当前用户,如果没有添加用户,设置初始密码88888888

package main

import "fmt"

func main() 
	user := make(map[string]map[string]string)
	user["join"] = make(map[string]string)
	user["join"]["pwd"] = "dsds"
	user["join"]["nickName"] = "fsa"
	fmt.Println(user)
	modifyUser(user, "tom")
	modifyUser(user, "join")
	fmt.Println(user)


func modifyUser(user map[string]map[string]string, name string)
	if user["name"] != nil
		user[name]["pwd"] = "8888888"
	else 
		// 没有这个用户
		user[name] = make(map[string]string)
		user[name]["pwd"] = "8888888"
		user[name]["nickName"] = "NickName:" + name
	

如果文章内容有错误,还请大佬们指导,防止误人子弟。继续冲冲冲!

golang中结构体struct(代码片段)

...环控制相关循环结构控制、包函数的使用异常处理、数组老奶奶可以看懂的切片老奶奶可以看懂系列之—Golang的Map映射结构体Struct面向对象Golang与Java面向对象区别Struct使用Struct介绍Struct结构Struct四种声明类型Struct使用细节结构... 查看详情

golang中结构体struct(代码片段)

...环控制相关循环结构控制、包函数的使用异常处理、数组老奶奶可以看懂的切片老奶奶可以看懂系列之—Golang的Map映射结构体Struct面向对象Golang与Java面向对象区别Struct使用Struct介绍Struct结构Struct四种声明类型Struct使用细节结构... 查看详情

老奶奶可以看懂的切片(代码片段)

前言这里总结的Golang笔记只适合有点编程基础的人看,比如Java补充:二维数组使用demo和遍历packagemainimport"fmt"funcmain() //遍历数组方式一 vararr=[2][3]int1,2,3,4,5,6 fori:=0;i<len(arr);i++ forj:=0;j& 查看详情

我奶奶都能看懂系列004☀️python基础语法,小学生也可以学!(代码片段)

🌌专注Golang,Python语言,云原生,人工智能领域得博主;💜过去经历的意义在于引导你,而非定义你;📢欢迎点赞👍收藏⭐留言!前言while循环while实现猜拳游戏计算1-100之间的累加和... 查看详情

我奶奶都能看懂系列007☀️python基础语法——函数,小学生也可以学!(代码片段)

🌌专注Golang,Python语言,云原生,人工智能领域得博主;💜过去经历的意义在于引导你,而非定义你;📢欢迎点赞👍收藏⭐留言!前言函数的定义和调用函数的文档说明带参数的函数... 查看详情

我奶奶都能看懂系列005☀️python基础语法——容器,小学生也可以学!(代码片段)

🌌专注Golang,Python语言,云原生,人工智能领域得博主;💜过去经历的意义在于引导你,而非定义你;📢欢迎点赞👍收藏⭐留言!前言字符串下标切片字符串查找相关的操作字符串的... 查看详情

我奶奶都能看懂系列002☀️python基础语法,小学生也可以学!(代码片段)

🌌专注Golang,Python语言,云原生,人工智能领域得博主;💜过去经历的意义在于引导你,而非定义你;📢欢迎点赞👍收藏⭐留言!前言1:输出2:输入3:类型转换后言因为下面有个后言... 查看详情

我奶奶都能看懂系列013python基础语法——类3(代码片段)

🌌专注Golang,Python语言,云原生,人工智能领域得博主;💜过去经历的意义在于引导你,而非定义你;📢欢迎点赞👍收藏⭐留言!前言01-继承的基本语法02-继承的分类03-子类重写父类... 查看详情

老奶奶可以看懂的切片(代码片段)

前言这里总结的Golang笔记只适合有点编程基础的人看,比如Java补充:二维数组使用demo和遍历packagemainimport"fmt"funcmain() //遍历数组方式一 vararr=[2][3]int1,2,3,4,5,6 fori:=0;i<len(arr);i++ forj:=0;j<len(arr[i]);j&#... 查看详情

我奶奶都能看懂系列016python进程和线程的使用(代码片段)

🌌专注Golang,Python语言,云原生,人工智能领域得博主;💜过去经历的意义在于引导你,而非定义你;📢欢迎点赞👍收藏⭐留言!Python进程和线程的使用01-多进程的使用02-获取进程编... 查看详情

一看就懂系列之golang的map如何做到最省空间?

前言今天在看源码的时候,发现一个东西,“空间”和“时间”一直是对立的,那么在“空间换时间”的时候,通常使用的是map中的key来快速判断,很多时候其value是用不到的。那么问题来了,既然很多时... 查看详情

一看就懂系列之golang的map如何做到最省空间?

...看就懂系列之Golang的pprof》)如果你觉得有收获~可以关注我的公众号【咖啡色的羊驼】~第一时间收到我的分享和知识梳理~ 查看详情

在 Golang 中访问 map[string]interface 类型的嵌套映射

...-0215:17:38【问题描述】:所以我正在尝试解析JSON响应。它可以是多个级别的深度。这就是我所做的:varresultmap[strin 查看详情

d3.js的基础部分之数组的处理映射(v3版本)(代码片段)

...列键(key)和值(value)组成的。每个key对应一个value,根据key可以获取和设定value,也可以根据key来查询value。 上面那个图展示了一个映射,该映射以每个值得id作为键,每个键对应一个值。  d3.map()能构建映射,包括以下方... 查看详情

java集合系列09之map架构

概要前面,我们已经系统的对List进行了学习。接下来,我们先学习Map,然后再学习Set;因为Set的实现类都是基于Map来实现的(如,HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的)。首先,我们看看Map架构。如上图:(01)Map是映... 查看详情

java集合系列01之总体框架

...组、映射等。Java集合工具包位置是java.util.*Java集合主要可以划分为4个部分:List列表、Set集合、Map映射、工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections)、。Java集合工具包框架图(如下): ?  大致说明: 查看详情

数据结构之映射map(代码片段)

1、映射Map,存储键值数据对的数据结构(key,value),可以根据键key快速寻找到值Value,可以使用链表或者二分搜索树实现的。首先定义一个接口,可以使用链表或者二分搜索树进行实现。1packagecom.map;23/**4*@ProjectName:dataConstruct5*@... 查看详情

php转go系列:map映射(代码片段)

...类型的定义。其实没那么复杂,任何复杂的类型在PHP中都可以用数组表示,映射也不例外。$array['name']='平也';$array['sex']='1';$array['age']='10';//outputArray([name]=>平也[s 查看详情