00:00
那下面呢,我们给大家来看一下map的使用方式有哪几种。Map的使用方式呢,和数组呃,有些是相似的哈,但是呢也有不一样的地方,我们总结了一下map使用方式呢,一共有三种方式,我们分别的给大家做一个介绍,第一种方式大家看到是先声明。大家看这里。第一种方式是先声明。声明完了过后再make。再make make完了再复制,这是第一种方式,第二种方式就是说在生命的时候直接就make。直接make一个空间。然后直接就下面就可以复制了,第三种方式呢,也有也有点意思啊,是在声明的时候直接就复制,就是我在声明的时候也不make了,直接直接给他一个复制,这也允许大家看这种用法没有没有用到make,但实际上底层里面他也给你make了,他怎么写的呢?比如说我这声明的一个map。
01:01
对吧,我这声明的一个map,当我声明完一个map过后呢,大家看到我在这个地方直接。给值了。这也可以三种方式,那你将来在这个做开发的时候,你看到别人不是使用的老师讲的这种方式,你也应该能够有些反应哈,你比如说诶老师说的就这种方式,那其他方式我都。不能够接受,那就麻烦了,也必须能够理解它是怎么用的,好吧,那三种方式呢?老师给大家做一个案例演示来看第一个map的使用。找一个。Map后面我们就会写项目啊,写项目的时候map用的也是非常多的喽,肯定用的很多,对不对,因为他是,呃,他这个k value6结构呢,可以解决很多项目上的一些实际问题,Map的使用来我们整理一下。给他一个标题二,那么有几种方式呢?好,我们先来看方式一。
02:05
对吧,方式一。直接走走代码了好吗?直接走代码。好,那现在呢,我们新建一个文件夹吧,CHAPTER09。叫map use。没问题吧,Map use,然后呢,我们新建一个文件叫main.go。好的,我从这边粘贴拷贝一份过来。没问题吧?从这边粘贴拷贝一份过来。好,我们先说第一种使用方式,第一种使用方式,诶第一种使用方式是不是前面我们已经讲过了,是不是就是这种方式,我拿过来用一下是不是就可以了,没问题吧。我直接把它放过来可以理解吧,就是直接就。就先声明,声明完了过后直接给他make就OK了。第一种方式讲完了。第二种方式。
03:01
第二种。第二种。第二种方式,那么第二种方式呢,我们也来写一个好吧,就这样子的,他直接就make。比方说,我这里要存放很多城市信息,City。CITY。变YS,这样写直接make。Make,我给它存放什么呢?存放迈进去,它的K为十寸,值也为十寸,好,大小我不写了,默认就行,这样就已经make空间咯,然后下面呢,我们就直接来用,比如说。我们第一个城市是什么呢?北京?北京。第二个城市。第三个城市,我们把它写好,第二个,第三个大家看到没有,我随便写,并不受它大小的影响。这跟宿主不一样,我直接拿来用就行了,看到没有,好,这是天津,它会自动给你增长,第二个我们叫天津,第三个我们叫上海。
04:03
诶,上海。没问题吧,写完了,那写完过后呢,我们把它输出来,大家看一下能不能正确输出。好把CT说出来,来,同学们我们运行一下,好吧,我们运行一下来CD点点上一节,然后呢,我们CD到map的使用。是不是有个map use啊?Go wrong。命顶够抛起来,我们可以看到这个时候输出信息了,大家看这里。我们map number1北京NUMBER2天津,NUMBER3上海。可以,也就是说我们直接给他make,然后呢,直接就可以使用。这是第二种方式,这种方式呢,用的也比较多,比较灵活对吧,比上面呢,大家看感觉到是不是要稍微简单一点。不拖泥带水对不对,第三种。第三种方式,我们来看一下。
05:01
第三种方式。好第三种方式,那第三种方式呢,就是说在声明的时候直接就给它赋值了,这种方式呢也是非常多的,比如说我们写的这个,看到没有,直接map map完了直接给字,其实这块呢,这个地方你甚至哈呃,如果说你用类型推导,连这个地方都可以不要,还可以写的更简单,可以这样写。比如说我们要存放这个什么呢?Hero的名字啊,Hero。也,你看我直接这样写也可以。然后呢,这边怎么写呢,Map。是准。十准来这块写完了过后这个地方直接写什么呢?一段大括号,大括号写上我们的K86就可以了,看这样写,比如说我们的第一个英雄HERO1。冒号,所以呢,西昌比如说宋江。
06:00
对吧,逗号第二个HERO2冒号第二个卢俊义。好,卢俊义,好,其他以此类推,我就不写那么多了,这个地方我用了类型推导,直接给他就完了。但你也可以这样说,老师我就喜欢这样写,也可以比VR。然后呢,我不用类型推导,把这个类型这样写也可以。也可以这样写,但这样写不是比刚才那个还麻烦吗?这样写肯定是可以的啊,那么我们先输出看一下。FMt.print然后把hero打打出来。我输出来heroes。等于。好,输出heroes yes。保存一下。跑起来我们看效果,诶这边有个问题是吧。这方为什么错了,大家知道吗?这我们少了一个。逗号,因为这个map呢,即使你最后这个地方,你也不能少逗号啊,不能少逗号。
07:02
他说no,什么out of body之外是吧?我们看这地方语法是不是出了些问题,看一下问题所在,看一下问题所,大家看到我们的问题在哪个地方了没有?是不是你多写了呀,是不是,诶你多写了,那那语法就过不去了,好再来看一下这个地方,现在这块。他说。期望一个分号是吧,期望一个分号。好,呃,这去掉就行了。OK,我们现在跑一下看效果。我们跑起来过后呢,我们发现啊,同学们,我们发现哪里看这。是不是hero,宋江、卢俊义都有了,非常简单,那当然有些同学老师,我觉得这个太麻烦了,反而容易写错,我可不可以这样写呢?我直接直接用类型推导,可不可以也是一样的啦,这样写其实更简洁,比如说这样写。
08:01
把这个去掉。是不是这样写更简洁啊?就直接哦,我这有个map,我付给heroes就完了,对不对,那为了表示看到有变化呢,我们再加一个HERO3第三,排名第三的是吴用。好,把吴用也排进去,再跑一个。跑起来走,我们可以看到这,诶,这习惯性的老喜欢少一个逗号啊,这个很不好习惯,很不好走起来。看到起来了,所以这种写法呢,比刚才那个更简单好,同学们,这是三种方式,大家都要去接受,呃,我个人建议呢,一般来讲,我喜欢用第二种方式。第二种方式比较清晰,第三种方式呢,它这个是先赋值,有时候容易搞蒙圈,而且我告诉大家啊,你在第三种方式这个做完了以后,你也可以继续给他加东西,也可以继续加,没问题。因为他已经相当于他在做这个生命的时候,他已经给你make空间了,说你在后面仍然可以用传统的方式来给他进行这个复制操作,比如说这样写。
09:10
Heroes是是吧,你也可以这样写,比如说这个叫做林冲,第五名是谁呀,林冲。对吧,林冲。OK。你看这样写也可以配合使用。再跑一个,看效果,我们发现第四个林冲也出来了,对吧,也是可以的,OK,好,这。这三种用法,希望同学们都能够把它掌握了,方式一,方式二。方式二,还有方式三。好,我把这三种方式呢给大家进行一个板书。第一种方式是最传统的方式。最传统方式,核心代码我们把它放过来。第一种方式OK,第二种方式呢,就是直接make,在声明的时候就直接make,第二种方式呢,是韩老师推荐大家使用的。
10:08
它结构比较清晰。就是一下一下子就能看清楚他是在做什么事。好,这是第二种。第三种呢,就是可以在声明的时候直接给他k value值。第三种方式。第三种方式呢,也也可以啊,也可以也挺好的,其实跟第二种方式其实很像对吧。三种方式,好同学们,那现在呢,这块我们的就是所说的这三种方式就说完了,那么下面呢,我们来一个应用实例,大家看这块儿呢,有一个应用实例的课堂练习,我们一起来完成。他说,演示一个k value的这个案例要求存放三个学生信息,我要存三个学生信息,每个学生有名字和性别。
11:00
哦,这个怎么做呀。就说我要存三个学生信息。那么每一个学生呢,他要有name和性别,这个时候你们想怎么做呢?大家思考一下这个我的思路这样子的啊,同学们,首先你一定要想这个map它是一个什么结构的比较合理。因为你你如果说这个学生信息只存放一个名字,其实挺简单的,就。K为十寸,名字也为十寸就完事了,但是呢,人家说的是一个学生既有名字又有性别,那就说一个学生有两个信息,那怎么做啊,是不是我们这样设计更合理,我们设计一个map。原先是这样设计的,就是直接写一个四寸,那么K。就是学生的学号,假设是学号,这个呢,就是学生名字就完了。但是呢,人家是一个学生,有名字还有性别,怎么办?诶,我们能不能把这个师尊换了,我们直接再做一个map。
12:01
这样是不是就可以了?所以说我们把这个值呢当成一个map,那就简单了,这个十寸就是学生的学号,这个map呢,里面我可以。写两个,一个是名字,一个是性别,就完事了。好,这块是关键哦,好,同学们,我们把这个案例给同学们走一下课堂案例。那课堂案例写到这里来。Map。的。Map使用的课堂案例。相对来说综合一点对吧,比刚才那个稍微绕一点。来吧,我们先把要求给同学们粘贴拷贝过来。既然如此,那么我们就来走代码。代码走一下。打开我们的VS啊,那在哪里写呢?我我还在这写吧,简单一点就这么写了啊,就案例。案例演示。先把要求粘贴复制过来,没问题吧?
13:02
比较简单,那现在呢,我们开始走了,首先呢,我定一个变量。比如说我用D几种方式,用我们的第二种方式,我比较喜欢我写students。Still。Students对吧?Students map这样写是不是更好一点?Students map走,然后make,我要make一个什么样的map呢?诶,这样的map。空间我可以先设预置十个,当然我也可以不设置,你看我原先这就没有写,不写也可以就干脆就不写了。好,我们放第一个学生。第一个学生怎么放呢?非常简单,你看这样写map。零。这是第一个学生,那么比如说他的编号为NUMBER1,好吧,第一个学生学生一的编号STUDENT01,然后注意啊,它的它的这个K是十寸,但是它的值是不是个map。
14:04
那是不是还得make一下呀?那是不是这样子的呀,因为它的是map,我们知道map必须先make才能用,所以说这地方呢,马上再make一下。能理解吗?我在map一个什么呀,Make一个什么呀,Make一个这样的map。他应该有至少有两个,因为呢有名字和性别,好,这个做完了过后,我们就可以赋值了。大家看能不能绕过来啊,就说相当于我这走走了两两层。他第一个出来了,过后呢,好名字我可以写进去了,比如说这个人第一个学生的名字叫做。小呃,汤姆。写完了。那么第一个学生的性别我们也记录下来,是男性。男的。完事你看。那就写完了,第一个学生,我们就通过这个十六零一他的K记录了两个信息,一个是他的名字,一个是性别,这样我通过他的学号就可以把这个学生学生信息全部找到,甚至我还可以更多,对吧,比如说我还有三个,比如说我还想记录他的地址也可以啊。
15:08
比如说这个人住在哪里,我还可以写。比如他地址ADD res,比如说这个汤姆呢,他住在哪里呢?比如他住在北京长安街。对不对。长安。J。OK,这样不是挺好吗?对吧,我还加了点信息进去,那同样道理了,那我们第二个学生是不是以此类推啊。第二个学生是STUDENT2,那么他也他因为第二个学生他的值又是一个map,因此你要make一下,注意只要使用到map,一定要make,如果你不make,就会报我们前面讲的这个错误,什么错误啊,Panic。叛逆的一个错误就是恐慌。他说,你这个地方是不能分配的,理解吗?一定要make,这句话是绝对不能少的。这句话。
16:00
不能少。少了就会报错。再强调一下,好,第二个学生,我们认为他的他的名字假设是Mary。Mary。Mary,好,她的性别呢?是女的,OK,编号你给他改了。对吧,如果你不改,就就把这个名字给冲掉了,他的学号仍然是二号,他的地址住哪里呢?好,他住在这个上海。他住在。住在上海黄浦江。OK,写完了,那么我们现在把这个信息输出来,我们看一下能否得到一个正确的信息。For print OK student map。写完了。没问题吧,我们输出来,我们运行一下,同学们,我们运行一下走。我们可以看到信息完全的正确。再看这里。是不是这是第一个学生信息,看第一个学生的case student01,它这里面有一个map,记录三个信息,第二个学生信息,呃,Case student2,它有一个map,记录三个信息。
17:11
对吧?那当然你也可以分开打印,说老师我不想打在一起,我我能不能分开打印?当然你也可以分开打印,说老师我只想取出第一个学生的,那我把这个K写进去,Student。呃,STU,零二,如果你写16的是零二的话,就相当于只把这个Mary取出来了,甚至你还可以这样取,说老师,我想取出第二个学生的名字也可以。对吧,这个就很灵活了嘛,这就很灵活了,来给大家运行一下跑起来。我们可以看到下面是不是只取出了这个第二一个学生的。他的名字,他的性别和他的地址没问题吧,但你也可以写,写的再具体一点说,老师我还想具体取出他的地址,就想要这个人的地址是哪里,第二个学生住在哪里的可以啊。
18:05
是不是这样子就只取出地址了呀?对不对,好这块我就不再去运行了,好,同学们关于我们这个麦谱的课堂练习呢,我们就给给大家评讲到这里,这里呢,我们用到了相对复杂的一个map结构,什么map结构呢?就是K为四寸,而值呢又是一个map。对吧,好,同学们,我把这课给大家板述一下。好的。OK,好,同学们,那关于我们map的使用呢,我们就先给大家介绍到这里,下面呢,我们就会继续介绍map的增删改查操作,我们在下一个视频里面再接着讲。好,这块关于map的使用就先说到这里。
我来说两句