map 的介绍和声明 | 学习笔记

简介: 快速学习 map 的介绍和声明

开发者学堂课程【Go 语言核心编程 - 基础语法、数组、切片、Map: map 的介绍和声明】学习笔记,与课程紧密联系,让用户快速学习知识。

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


map 的介绍和声明

目录:

一、map 的基本介绍

二、Map 的声明

 

一、map 的基本介绍

map 是 key-value 数据结构,又称为字段或者关联数组。类似其它编程语言的集合,在编程中是经常使用到。

有一种数据结构叫集合,它通过 key 可以找到对应的 value,在编程中使用频率很高而 map 就是 key-value 数据结构通过 key 可以找到对应的值。当想找到或者存储一个学生信息,学生编号做 key,名字做 value,此时就通过的数据结构将他们关联了起来。

 

二、map 的声明

1.map 的基本语法

var map 变量名称 map(这个 map 是一个关键字,这个 map 是固定的)[keytype](这里写上 key 的说明他的数据类型是什么)valuetype(说明这个值得数据类型是什么)

(1)key 可以是什么类型

golang 中的 map,的 key 可以是很多种类型,比如 bool,数字,string,指针,channel (管道),还可以是只包含前面几个类型的接口,结构体,数组

通常为 int . string(重点)

注意:  slice,map 还有 function 不可以,因为这几个没法用==来判断( key value 有没有存在 key,主要是用来判断。)

(2)valuetype 可以是什么类型

valuetype 的类型和 key 基本一样,这里就不再赘述了

通常为:数字(整数,浮点数), string(比如要保留学生的名字),map( map 的值可以是另一个 map 来构成多重 map ), struct(结构体)(map 值的数据类型)

2. map 声明的案例:

var a(变量名) map[string](key)string(值)

var a map[string]int

var a map[int]string

var a map[string]map[string]string( map 这里有两重 map ,声明一个 map 是不会分配内存)

注意:声明是不会分配内存的,初始化需要 make,分配内存后才能赋值和使用。(重要)与数组不一样,数组会自动分配内存空间,map 需要 make 才可以赋值与使用。

(1)案例演示

首先新建一个文件夹:chapter09-map demo01-main.go

代码:

package mainimport (

"fmt"

)

func main() {

// map的声明和注意事项

var a map[string]string

fmt.Printin(ab

}

此时输出是一个空的,因为没有 make。此时如果赋值会报错。

func main() i{

// map 的声明和注意事项

var a map[string]string(此时此刻的 map,a 没有数据空间则一定要报错)

a[ "no1"](这里是一个 key )="宋江”(赋予一个值)// ok?

fmt.Println(a)

}

如果想使用 map 需要先 make,make 的作用就是给 map 分配数据空间。

func main() {

// map 的声明和注意事项 var a map[string]string

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

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

这里 make 的写法:前面一个参数写 map 的数据类型,后面参数写给 map 多大的数据空间。

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

fmt.Println(a)

如果此时后面又增加了两个

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

a["no1"] ="武松”//ok?(这里 no1 与第一个重复)

//在使用 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)

此时说明 key 不能重复,会覆盖前面的值。但是值可以重复。

这里 golang 里面的 Map 是无序的,在每次运行的时候 key 是无序的。

总结:对以上代码的说明

(1) map 在使用前一定要 make

(2)  map 的 key 是不能重复,如果重复了,则以最后这个 key-value 为准

(3) map 的 value 是可以相同的.

(4) map 的 key-value 是无序

(5)make 内置函数的说明

Func Make:

func make( Type, size IntegerType)Type:

内建函数 make 分配并初始化一个类型为切片、映射、或通道的对象。其第一个实参为类型,而非值。make 的返回类型与其参数相同,而非指向它的指针。其具体结果取决于具体的类型∶

切片: size 指定了其长度。该切片的容里等于其长度。切片支持第二个整数实参可用来指定不同的容里﹔它必须不小于其长度,因此 make([ ]int,0,10)会分配一个长度为 0,容里为 10 的切片。

映射︰初始分配的创建取决于 size,但产生的映射长度为 0。size 可以省略,这种情况下就会分配一个小的起始大小。

通道:通道的缓存根据指定的缓存容里初始化。若 size 为零或被省略,该信道即为无缓存的。

相关文章
|
前端开发
前端学习笔记202306学习笔记第三十八天-手写map2
前端学习笔记202306学习笔记第三十八天-手写map2
246 0
前端学习笔记202306学习笔记第三十八天-手写map2
|
前端开发
前端学习笔记202305学习笔记第二十七天-什么是对象结构 set map之8
前端学习笔记202305学习笔记第二十七天-什么是对象结构 set map之8
75 0
|
前端开发
前端学习笔记202305学习笔记第二十五天-什么是对象结构 set map之4
前端学习笔记202305学习笔记第二十五天-什么是对象结构 set map之4
176 0
|
存储 C++ 容器
【C++】学习笔记——map和set
【C++】学习笔记——map和set
143 0
|
分布式计算 JavaScript 前端开发
Stream学习笔记(二)map与reduce
Stream学习笔记(二)map与reduce
|
存储 JavaScript
【ES6系列第二篇】适用JS初学者的Set对象和Map对象学习笔记
【ES6系列第二篇】适用JS初学者的Set对象和Map对象学习笔记
210 0
|
前端开发
前端学习笔记202306学习笔记第四十二天-Es6-Map的理解1
前端学习笔记202306学习笔记第四十二天-Es6-Map的理解1
162 1
|
前端开发
前端学习笔记202305学习笔记第二十八天-什么是对象结构 set map之13
前端学习笔记202305学习笔记第二十八天-什么是对象结构 set map之13
93 0
前端学习笔记202305学习笔记第二十八天-什么是对象结构 set map之13
|
前端开发
前端学习笔记202305学习笔记第二十五天-什么是对象结构 set map之5
前端学习笔记202305学习笔记第二十五天-什么是对象结构 set map之5
95 0
|
前端开发
前端学习笔记202305学习笔记第二十六天-什么是对象结构 set map之6
前端学习笔记202305学习笔记第二十六天-什么是对象结构 set map之6
157 0

热门文章

最新文章