00:00
我们接着来看一下麦谱切片。麦切片,哎,前面是不是我们讲过切片的概念。还还有印象吧,切片是不是可以存放一组数据?你可以把它理解成是动态的数组,对不对,但是呢,Map也可以对应一个切片,那你可以理解成是动态的map了,是这意思吧?那我举个例子,切片的数据类型如果是map。就是说切片,我们前面讲的切片是不是这样子的,基本上是大家回忆一下,我们这样写。是不是这是个切片,只是说这个切片里面放的类型是什么,是int?但是呢,如果这个类型不是int,而是map了,各位同学,那么这个呢,我们就叫map切片。它用英文来说就是slice of map叫map欺片,这样使用的话,则我们map的个数就可以动态的变化了,就map它的个数也可以动态的增加。
01:01
跟前面一样,前面你可以动态的增加一个int对吧,那我可以动态增加一个map,那这就更灵活了。那么这个地方的使用呢,肯定要相对比前面要复杂一点了。我给大家举个例子来说明一下麦切片的使用。要求注意听这句话啊,要求使用一个map来记录一个monster的信息。什么信息呢?名字和年龄,就是说我要用一个map。来记录一个妖怪的名字和年龄,这个对于我们来说挺简单的。但是人家这说了,他说也就是说一个monster对应一个map。一个monster对应map,并且每个妖怪,妖怪就是monster啊,Monster就是妖怪的意思,他说每一个妖怪的个数,并且妖怪的个数是可以动态增加的。比如说我先记录了一个狐狸精。然后我又记录了一个玉兔精。那么我要求呢?每一个妖怪信息保存在一个map里边的,能理解吗?
02:06
但是呢,这个妖怪的个数是可以动态增加。我可以加一个狐狸精,加一个玉兔精,我还可以加一个牛魔王,是变化的,因此这个地方我们就会用到迈普切片,因为这个迈普切片呢,就满足我们这个map的个数可以动态的增加。切片是不是就可以动态增加的意思啊?好,那么我们通过这个案例就可以把麦普切片的使用给大家讲清楚来吧,我们来讲这个麦切片。跟上老师思路。我们先来板书一下map切片。Map切片,我们来一个标题二,好,第一个就是它的基本介绍。没问题吧,基本介绍很简单,刚才已经说了,如果切片的数据类型是一个map。就是这个切片的数据类型是map了,那么我们就叫map切片。
03:00
Map切片最大的特点是什么呢?就是map的个数可以动态的变化。麦,但它最大的特点就是map的个数也可以动态变化了。那么我们来一个案例演示,案例的要求非常简单,他说要求使用一个map。使用一个map来记录monster的信息,有名字和年龄,也就是说一个monster呢对应一个map map,并且妖怪的个数可以动态的增加。好,这里我们就会使用到map切片,来吧,各位同学,我们给大家走一下代码。代码演示来代码,具体代码来做啊。把代码写到这。代码。好,那同学们跟着老师思路,我开始写写这一段代码了啊,打开我们的Vs code,那是因为它是map切片,因此呢,我新建一个文件夹。叫map slice。没问题吧,然后呢,我们新建一个文件叫面顶勾。
04:04
好的,然后我们从这边呢,粘一个通用的部分。没问题吧?好,我们来演示一下。演示map切片的使用。注意听啊,Map切片的使用,那我们的要求就是这个案例的要求呢,就先把它复制到这边来,好吧,我们的要求复制过来。OK,这个呢,稍微的板书一下。好整理好了,那首先我们先来第一步,先来定义或者声明一个map切片。Map切片没问题吧?Map切片怎么写呢?比如说我们写一个这样的东西,Map切片,Monsters。对不对,走切片是不是前面有一个中括号,然后它的类型就是map map是什么呢?十寸十寸,因为我相当于说我一个这个map里面可以存放一个妖怪的信息。
05:08
存放什么名字和年龄就行了,好,这是这个就是切片。这个就是切片,那那现在我们来增加第一个妖怪,注意听增加第一个妖怪。妖怪的信息来。判断一下。如果。如果我们第一个妖怪,它等于ne。就说现在还没有分配。现在还没分配,我先给他分配一个空间。对吧,等于什么呢?Make一下是不是它的这第一个是不是是不是对应一个map啊,是不是对应一个map啊,既然对应一个map好的,我呢就给它分配一个map空间。这个没有问题吧。那么因为我要存放名字和年龄,我就先写个二,然后我往里面放东西了,Master。
06:02
Monsters。第一个。他的map名字名那个内这里面的这个对应的这个map的K,我们先用name,然后呢是什么呢?比如说是牛魔王。牛魔。魔王,OK?然后我们再给他来一个。比如说。哦,这个地方是不是我们还有一个小问题啊,同学们,你这是个切片,是不是切片本身也要make一下呀?哎,同学们是不是你这是个切片,切片本身是不是也要make一下才能使用啊,就说map是要make切片是不是也要make一下呀?还记得吧,啊,切片本身要make,所以说我们这地方上来过后,先要对它进行一个make,不然的话后面也会报错,还理解吗?Make,我们要make的实际上是这个类型。有印象吧?好,因为我要我预计先放两个妖怪,所以说我先写二。
07:03
所以我先准备放两个妖怪信息,我准备放入。放入两个妖怪。能理解吗?所以说我本身这个切片是要make的,Make的这个类型呢,是一个是一个这样的,这样的一个切片的类型,切片两个,但是因为这个切片它的数据类型不是那种普通的数据类型,而是麦普所说我在用的时候呢,我也要怎么样make一下。能理解认识吧。然后这个肯定稍微麻烦一点咯。也就是说make两次,第一个切片本身要make,第二个切片它对应的这个数据类型是map,也要make,这样才能使用,能理解吧,好,第二个我们要记住他的年龄,Age,注意听讲哈。年龄H,好,这个时候呢,我们就给他输一个500岁,好,同学们,我们现在输出一下,看看此时此刻这一个monster。
08:00
输出什么信息,有没有报错?来CD点,点CD到map slice,然后go,让面点go跑起来。我们可以看到这个代码是有问题啊,它是有个问题,我们看哪里出错了。我们可以看到这个地方有一个报错。啊,这个地方它有一个报错原因,我们来分析一下。好,我们可以看到它这提示的,他说不是一个表达式,那干脆这样子,我们先声明再make这样写啊,VR。然后呢,我们直接先声明它下面呢,Make一下就完了,对吧,同时大家看到这个地方这个500呢,咱们要用字符串,因为它这里面的值是不是一个四寸呢,好这样再保存一下。保存完了,我们来执行一下,看看还有没有错误,现在没有报错了,没有报错我们来运行一把。来看效果。我们可以看到此时此刻,大家看这里。第一个map,大家看这是一个map啊,这是一个map。
09:04
是不是因为我这一个切片里面有两个map嘛,那第一个map呢,呃,它是一个名字牛魔王age是500岁,还有一个麦,为什么是空的,因为我现在还没有给它往里面放放数据,对不对?好,接着呢,我们再往里面放一个妖怪信息来吧。追听。好,如果第一个,第二个也是一个空,那么同样的道理。我把这些都改了,也给他分配,然后第二个呢,我们叫红孩儿。好,叫玉兔精吧,玉兔精,玉兔精呢,多少岁,400岁好,但我这样一做的话呢,同学们看到我们这个切片里边就有两个妖怪,而且每个妖怪的信息是放在一个map里边的,能理解吗?跑起来,我们可以看到后面这个麦也有信息了。对不对?好,问题又来了,假设我们要加第三个。我们要加第三个妖怪,我这样写还可以吗?
10:02
大家看,如果我加第三个,大家觉得这样说行不行。好了,现在呢,我们写个叫新的妖怪,叫什么呢?比如说叫做狐狸精。狐狸精300岁,哎,同学们想一想,此时此刻我这样在做可不可以?同学想,我原先make的是几个空间?是不是两个呀。但是你这写,你这给第三个。复制了,肯定这个地方会报一个错误。但是在我们实际开发中,我们往往很难确定在运行过程中要有几个妖怪,也许这个人,比如说这个妖怪是动态输入的,我也不知道他将来输两个妖怪还是三个妖怪信息对不对,那我这也不能写的太大,说老师他说加一个,你看你你们先来看现在运行肯定是要报错的。跑一个我们可以看到这地方报了一个错误,错误的原因来看一下。Index out of range,而且是第28行,28行其实就是我们的哪一行,就这一行。
11:06
报错了。那有些有些同学就说老师,哎,那就简单嘛,你把这个写成三不就完了吗?是的,如果我写成三,肯定这个是正确的,这个你放心。对吧,外星人他肯定正确,但是我。那你,那你这地方。那你岂不因为你并不知道将来人家放多少个妖怪,难道你写的很大吗?你写的太大了,是不是浪费你的空间呢?所以说有些时候我们是需要它能够动态增加的,而不能说我事先把这个make,这个空间很大,这是不对的,明白我的意思吧,那怎么处理这个事呢?好,我们来研究一下,上面这个写法肯定是错的。在下面这个。下面这个写法。遇见了。下面这个写法,越界数组越界啊,越界了。越界啊,那怎么办呢?我们要知道map,它本身有一个函数叫append,还记得吧?
12:06
呃,Slap啊,Sla就是那个切片,它有个append的这么一个内置函数,它其实可以动态增长的,因此呢,这里。这里追听。这里我们需要使用到。切片的。切片的end函数。函数。可以,可以动态的,动态的增加一个妖怪monster。哎,这样才是正道,你不能说我上来过后先把这个地方整的很大。你就是整到2000个,那我问,假设我妖怪有。3000个怎么办?那难道你说我写3000个,你写3000个好,我说我有3001个,你又怎么办?你始终是没办法满足的,因此呢,我们必须要想一个办法,可以动态的增加,就是说需要多少我就给你多少空间,不就完事了吗?
13:00
是不是好,这个应该怎么做呢?好,注意听讲啊,怎么动态增加,非常的简单,那你这样做第一步。先给我创建。先定义一个monster信息,这个对于我们来说没难度吧,Monster。这个这个map信息好,那你先写一个monster嘛,Monster是不是就是一个map吧,Monster是不是就是一个map。好,我们先做一个master。我们先写一个monster,比如说我写个monster,这样写的monster。我们要新增加的六新的新的monster啊,6MONSTER。它等于大家还记不记得,我们用一个比较简单的方式啊,直接就给它来一个。赋值了。我们有好几种方式来做是吧,我直接用这种方式,大家看能不能看懂啊。那直接给一个名字,这个呢,这个monster,我们叫做新妖怪,新的妖怪。
14:01
啊,新的妖怪。然后呢,给他一个名字啊,给他一个年龄,这比如这个新妖怪的年龄是200岁,写完了。这个是不是就是一个新的monster,然后你要把这个monster给我加到这个切片里面不就完了吗。加进去openend怎么样?他然后再把这个新妖怪给我openend,最后我接收一下完事。这样就可以动态的增加一个新妖怪了。假设我们这个妖怪叫火云邪神。和云先生。对吧,假如我们新的药物叫活鱼邪神,他200岁这样才是正道,因为那我将来如果说你要动态增加,我只要去创建一个新的新的这个monster的一个map,然后我把它openend一下就完事吗?这样子你即使只给我分配了两个空间,诶,我需要多少我就加多少,这才是正确的做法好不好?来同学们,我们执行一下,看运行代码。
15:04
好,我们可以看到这地方有个小问题,对不对,这样有个小问题,问题在哪里,我们看这里它报一个错误。哦,对了,这个地方因为是字符串,我们给了一个给了一个整数,这个地方是不行的,对吧。好,我们再跑一下,同学们跑起来。这个end的。A pen,这为什么错了呢?啊,同学们可以看到这个地方的问题啊,这个问题啊,一看就清楚了。大家看这是不是已经说的很清楚了呀,你不能把这个六的再给他,你这个不是自相矛盾吗?我这其实是应该这样接受,对不对,我把这个啊。6MONSTER给他追加到这个monsters上面去,再付给新的这个monster,那这样子的话,是不是就在这个基础上追加了一个,保存一下没问题了,代码非常清晰啊,非常清晰,来跑一个。
16:00
走,我们运行一下,我们可以看到此时此刻这个结果就是正确的了,大家看。有一个牛魔王,是一个map。第二个玉兔精是一个map,第三个火云邪神是一个map,完事,这样我们就可以通过脉切片来动态的增加我们这个map,对不对?好,这就是我们新的一个知识点,这块呢,也在我们开发中用的比较多啊,你不要小看这个知识点,其实用的很多的啊,如果你没有把这个map欺片搞清楚,那么我们就不知道怎么动态的去增长我们map这种数据类型。好,同学们,那关于这个map的这个代码呢,Map切片代码,我给同学们板书一下。好,因为这个代码。好,我给大家板述一下,代码也不是很多啊,整理一下就行了。从这开始截取到我们的哪个呢?第26行。保存。Okay。整理一下。
17:00
好,这是第26行,紧接着呢,我们从第27行开始截取。板述一下。从第20项。到这里。好,第20项我们也把它截取完毕。好整理一下这个思路。好,同学们把它放到正确的位置好,那关于我们这一个map切片的使用呢,我们就给同学们介绍到这里,后面我们在做项目的时候啊,是会用到这个知识点的,希望同学们加深对map切片的使用,包括我们前面做的布置的作业题都要去练习才可以的。好,麦切片。说到这里。
我来说两句