map 三种用法和应用实例|学习笔记

简介: 快速学习map三种用法和应用实例

开发者学堂课程【Go语言核心编程 - 基础语法、数组、切片、Map:map三种用法和应用实例】与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/625/detail/9657


map三种用法和应用实例

内容介绍:

一、map的使用方式

二、使用方式的案例演示

三、总结

四、课堂练习

一、map的使用方式

map 的使用方式和数组有些是相似的,但是也有不一样的地方,这里总结了map的使用方式,一共有三种方式:

1. 方式1

//声明,这时map=ni1

var cities map[string]string

//make(map[string]string, 10)分配一个map

cities = make(map[string]string,10)

2. 方式2

//声明,就直接 make

var cities = make(map[string]string)

3. 方式3

//声明,直接赋值

var cities map[string]string = map[string]string {

“no4”:“成都",

}

cities[“no1”]=”北京”

第一种方式是先声明,再 make,make 完了之后再赋值。

第二种方式是在声明的时候直接 make 一个空间,然后直接就赋值了。

第三种方式是在声明的时候也不 make,直接就赋值,但实际上底层也用make了。怎么实现呢,这里比如先声明一个 map,在声明过后 map[string]string直接给值了,这样也可以。

这三种方式将来在做开发的时候,在看到有些使用的不是这里讲解的方式,也应该要有所反应。


二、使用方式的案例演示

第一个是map的使用,map在后面写项目的时候会用到很多,它的 key value 可以解决很多项目上的实际问题。

在 chapter09内新建一个文件夹叫 mapuse,新建一个文件叫 main.go,从上一份文件里粘贴一份通用的代码过来,代码如下:

package main

import (

“fmt”

)

func main() {

}

在主函数中写第一种使用方式,由于第一种方式已经讲过了,所以这里直接引用过来,代码如下:

func main() {

//第一种使用方式

var a map[string]string

//在使用 map 前,需要先 make , make 的作用就是给 map 分配数据空间

a = make(map[string]string, 10)

a[“no1”] = “宋江”  //ok?

a[“no2”] = “吴用”  //ok?

a[“no1”] = “武松”  //ok?

a[“no3”] = “吴用”  //ok?

fmt.Println(a)

//直接声明再make,就完成了

//第二种方式

cities := make(map[string]string)  //存放很多城市,直接make,存放map 进去,它的 key 为 string,值也为 string,大小默认。

cities[“no1”] = “北京”  //第一个城市是北京

cities[“no2”] = “天津”  //第二个城市是天津

cities[“no3”] = “上海”  //第三个城市是上海

//

可以发现并不受它大小的影响,和数组不一样,直接用就行了。

fmt.Println(cities)  //运行

}

打开 cmd.exe 输入以下命令回车:

cd..

cd mapuse

go run main.go

输出:

image.png

可以看出这里有no1:北京,no2:天津,no3:上海。也就是说可以直接 make,直接使用。这种方式也用的比较多,和第一种方式比较起来更灵活一点,不拖泥带水。

继续在 func main()函数里写第三种方式:

//第三种方式

//在声明的时候直接赋值了

heroes := map[string]string{  //存放hero,写完后写 key value 值

// :=用了类型推导

“hero1” : “宋江

hero2” : “卢俊义

hero3” : “吴用,

fmt.Println(“heroes”, heroes)

}

打开 cmd.exe 输入命令 go run main.go 回车:

image.png

可以看到hero1:宋江,hero2:卢俊义,hero3:吴用都有了。这种写法要比不用类型推导更简单。

如果不用类型推导:

//这样也是可以的,只是有些麻烦

var heroes map[string]string = map[string]string{  //注意格式

“hero1” : “宋江

hero2” : “卢俊义  //注意逗号,因为即使map在最后一步了也不能少逗号。

fmt.Println(“heroes”, heroes)  

//

输出查看

}

打开 cmd.exe 输入命令 go run main.go 回车:

image.png

可以发现hero1:宋江,hero2:卢俊义都有了。


三、总结

以上就是 map 的3种使用方式,都要去掌握,小建议是一般使用第2种方式,比较清晰;第3种是先需要赋值,有时候容易紊乱。而且第3种方式在做完了以后也可以继续加东西,因为相当于在做了之后已经make空间了,所以在后面仍然可以用传统的方式来给它进行赋值操作。比如在第三种方式后继续添加:

heroes[“hero4”] = “林冲

fmt.Println(“heroes=”, heroes)

输出得:

image.png

heroes = map[hero1:宋江 hero2:卢俊义 hero3:吴用  hero4:林冲]

可以看见hero4:林冲也输出出来了。

3种方式都要去掌握。

方式1:

//第一种使用方式

var a map[string]string

//在使用 map 前,需要先 make , make 作用就是给 map 分配数据空间

a = make(map[string]string, 10)

a[“no1”] = “宋江”  //ok?

a[“no2”] = “吴用”  //ok?

a[“no1”] = “武松”  //ok?

a[“no3”] = “吴用”  //ok?

fmt.Println(a)

方式2:

//第二种方式

cities := make(map[string]string)

cities[“no1”] = “北京

cities[“no2”] = “天津

cities[“no3”] = “上海

fmt.Println(cities) 

 //运行

方式3:

//第三种方式

heroes := map[string]string {

“hero1” : “宋江

hero2” : “卢俊义

hero3” : “吴用,

}

heroes[“hero4”] = “林冲

fmt.Println(“heroes”, heroes)

这样map的使用方式就讲解完了。


四、课堂练习

接下来看一个应用实例:

课堂练习:演示一个 key-value 的 value 是 map 的案例,比如:我们要存放3个学生信息,每个学生有 name 和 sex 信息

思路:这个 map 是什么结构比较好呢,因为如果学生信息只放一个名字,那么挺简单的,就定义 key 为 string,名字 name 也为 string 就完成了。但是这里是既有名字也有性别,也就是说1个学生有2个信息。那么应该是:

map[string]map[string]string  

//string假设是学生的学号,map[string]string里可以写2个,一个是学生的名字,另一个是学生的性别。

代码演示:

studentsMap := make(map[string]map[string]string)

//首先定义一个变量,然后make一个map[string]map[string]string这样的map。

studentsMap[“stu01”] = make(map[string]string, 2)  //放第一个学生编号为01,注意它的key是string,但是值是map,所以还需要make一下,至少有2个,因为有名字和性别。

studentsMap[“stu01”][“name”] = “tom”  //赋值

studentsMap[“stu01”][“sex”] = “  //通过key记录了2个信息

studentsMap[“stu01”][“address”] = “北京长安街~

studentsMap[“stu02”] = make(map[string]string, 3)  

//注意:只要使用了 map 一定要 make,如果不 make 就会报 panic 这个错误,它会说这个地方是不能分配的。

studentsMap[“stu02”][“name”] = “mary”  //赋值

studentsMap[“stu02”][“sex”] = “

studentsMap[“stu02”][“address”] = “上海黄浦江~

fmt.Println(studentMap)

运行得出:

image.png

map[stu01:map[name:tom sex:address:北京长安街~]  stu02:map[name:mary sex:address:上海黄浦江~]]

可以看到信息完全正确,第1个学生的 key 是 stu01,它这里面有个 map,记录三个信息;第2个学生的 key 是 stu02,它里面有个 map,记录三个信息。

也可以分开打印,比如只想取出第2个学生的信息:

fmt.Println(studentMap[“stu02”])

运行得出:

image.png

map[name:mary sex:address:上海黄浦江~]

可以看见只取出了第2个学生的信息。

如果还想再具体一点也可以,比如再取出第2个学生的地址:

fmt.Println(studentMap[“stu02”][“address”])  

//这样也是可以的,这里就不再去运行了。

关于 map 的课堂练习就讲解到这里了,这里用到了一个相对复杂的 map 结构,就是 key 为 string,而值又是一个 map。

关于 map 的使用就介绍到这里。

相关文章
|
9月前
|
存储 程序员 C++
C++中map的使用方法
map是一种使用键值对的数据结构,它允许我们使用键来查找值。map中的键必须是唯一且有序的,而值可以重复并且没有特定的顺序。 map中的数据以树结构进行组织,其中每个节点都由一个键和一个值组成。根据键的大小,节点被插入到正确的位置以保持树的有序性。这使得在map中查找值非常高效,因为我们可以使用二分查找来快速定位值。
198 0
|
存储 前端开发 对象存储
一文搞懂Map与Set的用法和区别!
前言 作为前端开发人员,我们最常用的一些数据结构就是 Object、Array 之类的,毕竟它们使用起来非常的方便。往往有些刚入门的同学都会忽视 Set 和 Map 这两种数据结构的存在,因为能用 set 和 map 实现的,基本上也可以使用对象或数组实现,而且还更简单。 但是,存在必然合理,当你真正了解 Map 和 Set 之后,你就会发现它们原来时如此美好!
1544 0
一文搞懂Map与Set的用法和区别!
|
4月前
|
存储 前端开发 Java
Java【代码分享 13】前端动态添加一条记后端使用JDK1.8实现map对象根据key的部分值进行分组(将map对象封装成指定entity对象)
Java【代码分享 13】前端动态添加一条记后端使用JDK1.8实现map对象根据key的部分值进行分组(将map对象封装成指定entity对象)
23 0
|
存储 C++ 容器
C++ 第九节——map/set(用法+底层原理+模拟实现)
们需要知道的是,Map和Set的底层都是红黑树。
571 1
C++ 第九节——map/set(用法+底层原理+模拟实现)
|
Go 开发者
map 三种用法和应用实例|学习笔记
快速学习map三种用法和应用实例
177 0
map 三种用法和应用实例|学习笔记
|
存储 Java Scala
Map 的基本介绍和创建 | 学习笔记
快速学习 Map 的基本介绍和创建
66 0
|
Scala 开发者 Kotlin
Map 的四种构建方式 | 学习笔记
快速学习 Map 的四种构建方式
281 0
|
JSON 分布式计算 Hadoop
Map 方式|学习笔记
快速学习 Map 方式。
70 0
|
JSON 分布式计算 Hadoop
map 方式 | 学习笔记
快速学习 map 方式
68 0
|
存储 安全 Go
go语言容器(集合)、Map、sync.Map
go语言容器(集合)、Map、sync.Map
147 0