00:00
我们看一下麦普的增删改查的操作,对吧?那么在我们做项目的过程中,我们必然会用到麦普,那么对于麦来说呢,它最重要的操作呢,就是增加删除、修改和查询这样一些操作,好我们来一起看一看。Map的增加和更新,更新就是修改了,它是怎么操作的呢?它非常的简单,就这样操作,我前面有个map的名称,然后写上一个K,再给他一个值,这里面就会分两种情况,一种情况就是如果这个K存在。和这个K不存在的情况,如果这个K没有,现在还没有,就相当于增加,如果这个K已经存在了,就相当于修改这一点,是不是我们在前面已经体验到这一点了,对不对?好,还是老规矩,我们呢也把它进行一个板书。来,放到这里。Map的增删改查的一个讲解和使用。
01:01
给他一个标题二,我们首先看更新。和增加和更新。对吧,OK,它这里呢,我做了一个说明,大家看这里,这个说明它是很重要的。就是根据你这个K不同的情况呢,这个操作就会出现不同的结果,那么我们来举个案例。好的,那现在呢,我们仍然是新建一个文件夹,对不对,我们叫map c rud rud就是增删改查的意思。然后呢,我们老规矩新建一个文件叫main.go。好的面点歌放到这儿,然后呢,为了稍微快一点,我把前面的拿过来为我所用。好,洗完了。对不对。呃,那么我为了演示真删改查呢,我是需要有一个有一个map的,所以说呢,这个map我在前面一已经有一个了,我就用一个吧,我用第二种方式的这个map好吧。
02:02
没问题吧?对,因为这个很简单,所以老师就没有重新写了,那我们来看一下,大家看到。这个地方我在做完了之后,我写NUMBER1 number2 number3,因为因为前面没有NUMBER1和NUMBER2NUMBER3,所以说它就相当于添加。那如果说我在这个地方再执行了一个NUMBER3。我把这一方设置一个什么呢,波浪号。好,我再次输出。我再次输出。好。这时因为。因为什么呢?我写到。我把这个注解写到上面去,好吧,因为NUMBER3。这个K。这个key已经存在了。已经存在,因此,因此下面的这句话等价于等价就是什么呢?不要说等价啊,就是修改。
03:00
修改。如果你这个NUMBER3存在,就是修改,NUMBER3不存在就什么呀,就增加好我们来执行一下这个效果。好,CD点点上一级没问题吧,CD点点上一级我们清空一下先。DR,好,我们。CD到src。试一下睡吧。DR,好,CD到go code DR,然后CD到我们CHAPTER09。好,CD到我们的map,什么呢?C rud go run。命点go跑起来,同学们看效果。我们可以看到,此时此刻,你看前面这个NUMBER3是上海,后面这个NUMBER3变成了上海。一个波浪号,这说明修改成功,好这个就是我们所说的修改啊,修改和添加,其实它就是主要是决定于你这个K是否存在。
04:00
先把这个呢给大家放到这里。好,我们接着来看麦普的其他操作。Map的其他操作,讲完这个增加和修改过后呢,我们再来看删除。Map里面这个删除呢,它用的是一个内置函数。内置函数叫delete delete,第一个参数写上这个map的名称,第二个写上这个k delete是一个内置函数,如果K存在,则删除。K value这一段数据,如果K不存在呢?各位朋友,那么就相当于不操作,但是他也不会报错。这个delete的内置函数在我们的手册里面是有的,来我们lawyer。内置函数delete点一下看内置函数delete,按照指定的键将元素从map中删除,如果若M为ne,就是这个M为空,或者没有这个元素,Delete不进行任何操作,但是呢,它也不报错,对吧?好,我们来看一下。
05:01
还以这个为例吧。好朋友们,下面呢,我们演示一下删除。比如说我这里使用delete,因为delete是一个内置函数,因此呢不用去引什么包,然后我把这个C往这一放,比如我要删除的是NUMBER1。好,那我删除完了过后呢,我再输出一下。大家看效果啊。好,我们来执行一下这个代码。我们发现当他做完了过后,你会发现NUMBER1北经已经没有了,是不是同学们看。这里面是不是已经没有NUMBER1了,说明删除成功,那么如果我再继续删除,同学们可以看到,假设我故意写一个NUMBER4,显然NUMBER4是不存在的,我们可以看到他有没有报错,注意听这句话。当delete。指定的。指定。
06:01
的这个K不存在。不存在时,那么删除就不会操作,不会操作也不会报错,也不会报错。好,这点请大家注意一下,它也不会不会操作,也不会报错,那么我们可以看到是不是这样子的呢?执行一把,我们可以看到在代码里边并没有报任何错误,同时删除完了过后它仍然还是伤害。拨号,因为本身就不存在NUMBER4嘛,OK,好,这是我们删除的一个操作。好,我把删除呢,也给同学们整理一下,到笔记里边去。板书一下啊。好,这是map的删除。走一个。比较比较比较简单哈,这个比较简单。好整理一下map的删除,诶这个地方为什么。长成这样子的。往下来啊。
07:02
好,Map的删除我们板述一下。对不对,这是它的说明delete啊,那么delete这个函数呢,我也给同学们截取到我们的笔记里面去,大家呢,在看笔记的时候一目了然。好,这是delete对不对。我把它整理一下。这是定例的函数的一个说明,那么案例演示呢,我们也给大家反述一下,这是说明。这个地方是案例演示对吧。然后我把案例演示的代码给同学们板书一下,到这里。老师这儿写的很清楚了。删除。就是这样一个操作。好,删除完毕,那我们接着再往下面看map的其他操作。我们再来看map的其他操作,下一个就是细节,呃,如果说我们删除一个map所有的K,有些有一些这个map里面有些编程语言里面的map呢,它的确有一个所有的像这个clean这样的一些方法,就一次性的把map所有的K全部删掉,但是很遗憾我们的go里面没有这样一个方法。
08:13
那有些同学说了,说老师,那我如果要把map里面所有K一次清空怎么办呢?只有一个办法,就是便利这个K。就是把这个K,把这个K遍历一次,后面我们会讲map如何遍历,遍历完了后逐个删除。啊,所以说稍微麻烦一点,那也可以这样做,如果你觉得上面这种方法删除所有map里面的K比较麻烦的话呢,你也可以使用老师的第二个方案,就是让这个map只重新分配一个空间,你重新分配一个make,一个新的空间,让原来的成为垃圾,让GC回收就完事了,那也就说这样子一做的话,你你这个map就彻底的变成一个新的map了,原先这个map呢,就变成一个什么呀,空的,呃,变成一个垃圾,就是因为没人引用它这个数据空间了嘛,他就被回收掉了,比如说我想一次性删除,我可以这么干。
09:06
啊,我们可以看到。如果。如果希望。希望一次性删除。删除所有的K,那有两个方案,第一个就是便利,便利。便利所有的K,然后逐一删除。然后逐一删除。呃,然后呃,逐一删除。对吧,这个呢,要用到便利的知识。后面我们再说第二种方法就比较简单了,比较暴力啊,直接分配一个新的,直接make。一个新的这个空间即可,比如说我想把上面这个CT给他整个清空了,我就这样写。然后make,重新make一个什么呀,重新给他执行一下这个make指令就完了。
10:06
你只要这样一执行。那相当于这个CT指向一个新的空间,那原先这个原先这个CT指向的这些数据空间就怎么样呢?就成为一个垃圾就被回收了,他就扔掉了,也就说让让系统回收对吧,那你想我这样一执行过后,同学们看看到这个CT就空了。那是不是这样子呢,我们跑一下。可以看到。可以看到是不是空了吧,一次性清清空也可以,这种方案也可以啊,也可以,肯定比这个逐一删除效率要高啊,效率要高,而且呢也比较简单,所以说我推荐呢,如果同学们想把一个map里面所有的K全部清空,你就按老师第二个方案,但第一个方案呢,因为涉及到便利还没有讲,所以说学完这个便利过后,你也可以for循环一把,然后呢用delete一个一个删,但是相对来说没有第二个方法简单是吧?好,我把这个呢也给同学们整理一下。
11:03
这块我们讲的是删除的一个细节,对不对,把它整理到我们的板书里边去。欧了。好,这是删除的细节说明,我们进行一个本书,把刚才老师写的这段代码呢给同学们放到笔记里边去。非常简单,这就是删除所有K的两种方式。哦了。给大家整理一下。好,紧接着呢,我们再来往下边看。Map。那下面呢,就是麦的增删改查的最后一个叫查询。就说我们想去看看一个map里面有没有这个K,怎么做呢?它其实是可以这样做的,大家看这里看我的代码。他这样子的,他呢,直接找这个map去取这个K。取这个K呢,它会返回两个,两个这个数据,一个是value,一个是返回的结果,如果他找到了追听,如果,如果确实有这个K。
12:07
如果确实有这个K呢,这个范就是这个这个边这个值,但这个值的变量名称是可以随意的啊,我这写的是范的RS,你也可以写个OK都都行,这个无所谓,那这个value呢,就是这个K对应的值,所以说你可以通过这个find。Res来判断是不是找有这个对应的K看啊,如果heroes这个map里边存在NUMBER1,那么find。Res就会返回一个处,否则返回一个false,通过这种方式呢,我们可以看到到底有还是没有好,我们把这个呢给同学们做一个演示和说明来吧。把map的查找给大家整理一下。好,这是map查找。好的,Map的查找我们板述一下。案例演示一个好吧,案例演示一个好,我们呢,就以这个上面这个为例吧,就以上面这个为例来走一个。
13:05
好,走一个啊,我们演示。演示map的查找。好,非常简单,你看我这样写啊,比如说写个value。逗号。对吧,都好,然后呢,这里面返回一个OOKOK,我用OK来接收。等于什么呢?比如说我要看看这个里边有没有NUMBER1这么一个K,对吧,有没有好,如果有的话呢,我们就进行一个判断了,如果OK。他为真。那么就说明有我把这个打印出来。边。好,我打印一下啊,我说有对有有这个K,有NUMBER1这个K。NUMBER1这个K值为多少呢?他的职。
14:01
职位。职位这么多,我把它输出来对不对。然后呢,这边value就可以了,我把这边用一个格式化的方式输出。那当然还有一种可能性就是没有,那就是返回一个force。返回一句话就是什么呢?没有NUMBER1这个K。对吧,没有。没有NUMBER1这个K,那就不存在这个值了,对吧,就不存在这个值了,我就不输出了。写完了。没问题吧,好,我们来运行一下这个map的查找,是否可以成功跑一个。走起来看效果。我们可以看到这边有个结果啊。他说没有NUMBER1这个K,那确实没有,因为我上面不是删除了吗。是不是你上面这个map已经被删除,因为我在上面有一个delete,把这个NUMBER1已经干掉了,是吧,那我换一个吧,换一个NUMBER2 number2应该是有的。
15:03
走一个。跑起来。我们可以看到这边提示的信息是说有NUMBER1,这个K值为天津完全正确,好这个呢就是给大家演示了一下我们这个map的查找,查找的一个具体的一个方式和方法。好,把它进行一个板书。好吧,查找案例演示,那么我们写了一段代码。我们写了一段代码是吧。这是关于去map里面查找的一个具体方法。那么对于上面这个代码的说明呢,我再说一下对上面代码的。代码的说明。好,我们整理一下。那关于对代码的一个整理说明,我就直接从我的幻灯片里边把这一句话说过来就行了,好吗?也不难对吧,也不难,挺简单的。说好,那我们讲完这个地方,我们可以看到此时此刻啊,我们就把什么呢,就把的这些看到我们讲了麦的增加和更新。
16:11
我们讲了map的删除,我们还讲了map的查找完事,那关于增删改查,对map的增删改查呢,我们就给大家介绍这里,那在后面写项目的时候,我们会经常使用到麦的增删改查的操作,请大家注意一下。
我来说两句