老奶奶可以看懂系列之---Golang的Map映射

Posted 星际迷航‖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了老奶奶可以看懂系列之---Golang的Map映射相关的知识,希望对你有一定的参考价值。

前言

这里总结的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的Map映射的主要内容,如果未能解决你的问题,请参考以下文章

老奶奶可以看懂系列之---Golang的Map映射

Golang中结构体Struct

Golang中结构体Struct

Golang中结构体Struct

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

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