00:00
我们接着给大家来介绍一下勾浪里面的切片,它需要注意的地方和咱们在细节上的一些说明,那这里呢,我总结了一些关于细节的说明,我们来看一下第一个。切片在初始化的时候就是我们用的第一种方式哈,大家还记得如果说我们是让一个切片直接引用一个已经存在存在的数组,那么它应该有两个参数,第一个呢,叫start in index。比如说我们前面用的一。还有一个呢,叫n end index,那么这里面我要说明一下,就是。这种方式啊,这种方式其实前面呢,我们已经提到过了,它是怎么取的呢?它是从A这个数组下标为start index,取到下标为end index的元素,但是不含这个最后这个元素。这点大家注意一下好吧,嗯,这块我就不再举例了,第二块呢,切片初始化时仍然不能够越界,能理解意思吧,就是你在用的时候呢,默认情况下这个切片该怎么用还怎么用,它的使用范围仍然是零到这个数组,最大是零到这个指向数组的这个大小之间,但是呢,后面我们讲到它可以动态增长,只有动态增长以后才能够去使用后面的这个。
01:29
这个数组,比如说我打个比方。我打个比方。比如说同学们看到。你比如说这儿有个案例。这个。一四那么大家知道这个是第四个元素,其实你是,呃,没有没有取到的,没有引用到的,你就不能这么用。大家看。Print a,如果我们这样用是没问题的,没问题的slice,比如说。我我们这一共有几个元素,大家知道123有三个元素,所以说你这地方取的可以是零,可以取到。
02:06
一可以取到,二可以取到,但是你不能取到第三个元素,第三个如果是第三个的话,那相当于是。这个元素了,但是因为它你在这个引用的时候,其实你只引用到的第几个元素,就是第20~40,你没有引用它的,所以说你在这个元素用这个元素的时候,他仍然会报告越界。他仍然会报告越界,我们来试一下。来,跑一个。跑起来,我们看效果。我们可以看到他仍然报了一个越界,看到没有?Index out of rain。为什么?我就不说了。因为你引用的时候,你没有引,引用到人家最后这一个吗?所以说人家就这样用,你肯定要报错是23行,大家看一下是是不是第23行。23行看到没有,所以说它默认仍然不能越界。好,这一点请大家注意一下,那下面呢,我们还要注意,在这种引用的时候,就是我用一个切片去去引用已经存在的一个数组,它有几种写法,比如说。
03:14
0END,如果你的起始的这个值,就是说in start index,它是零,那么你也可以简写成end,就是说如果你这前面不写,默认就是零,能理解吗?就说它第一个音start应该是,如果你不写,它默认就是零。再看这一个,如果大的。如果是你前面有个start in index,还有一个呢是N,也就是说你要从这个位置取到这个数组的最后一个。因为。大家都知道嫩是数组的长度,不包含这个数组长度,就相当于说把整个数组后面全部取光,对吧,如果你这样写的话,也可以简写是大这个,后面这个不用写了,因为后面这个值默认是什么呢?它默认就是数组的。
04:05
这个长度。数组的长度能理解吧?好,还有一点,如果你默认是要把整个数组都取下来。理解这意思吗?就是说如果你,你希望有一个切片。把这个数组从第零个元素引用到它的最后一个元素。那么你也可以简写成这种形式。就AR两边都。不行,因为大家都知道我刚才讲过,默认这个是零,默认这个是N。嫩,那你如果说本身就是这样的话的话,画的话你也可以简写成这样子。能理解吧,好,这个呢,第三个我给大家举个例子,其他因为比较简单,我就不说了,大家还是按看这个案例大家说一下,比如说。这个地方我把它改了。大家看时代。等于。
05:01
从零开始取,取多少呢?把整个数组的全部取过来,大家看,这个是从零取到这个数组的最后一个就全部取过来,大家看,这时候我们便利一下看效果。这时我们可以看到它把五个元素都取出来了,看到没有?看到吧,嗯,所以说这种写法呢,你也可以直接简写成这种形式。很多的项目里边,他就是这样写的。就可以简写。前后两头。都使用默认值,这样一样一样可以,一样可以玩,大家看我再来运行一下,你看代码没有报任何错误。仍然是可以的,好吧,这点我就不再多说了,好吗?第二点我们就说到这里,第3.c就是这个capability,它是一个内置函数,用于统计切片的容量及最大可以存放的元素个数。前面已经说过了,还有一点,切片定义完毕以后还不能使用,因为它本身是个空的需要,需要让其引用到一个元素或者make过后才能使用。就是说你定义完一个切片过后,要么你是引用到一个数组去,要么你是make一个空间来供切片使用。
06:17
对不对,这点请大家注意,否则它是个空的,没法用。还有一点切片可以继续切片,这个呢,我给大家举个例子说明。我案例演示一下。这个地方我给大家案例演示一下,注意听,什么叫切片,可以继续切片呢,比如说。大家看这个案例,这个时候slash是不是已经是个切片了?我问大家slash是不是一个切片?那如果说我想从这个切片。里面再切一块用,拿来用呢也是可以的,比如说我有一个SLASH2。这个十来12我从哪里切呢?我不从这个数组切,我直接从这个这个切片切是可以的。
07:00
大家看到没有,我自己从这个,比如说我从这个数组里面切什么呢?从它的第一个元素切到。第二个元素,请问。这时十代12是什么东西?是不是他也,他也是个欺骗。是不是他也是个欺骗?它等于多少呢?它里面有哪些元素?同学们思考。如果这样切的话。是不是相当于在这个原先这个切片上再切了一个元素出来,那实际上是哪一个。是不是就是20,因为你原先这个切片slash这个切片实际上是。这么多。是吧,然后呢,我在这里面切,从这个切片的下边为一,切到下边为二,但是不包含二这个,那实际上就是哪一个。20能理解吗?但是我告诉大家啊,时代12也好,时代时时代时也好,其实他们都指向同一个数据空间的,也就是说时代12改变了,十代11也会变化,同时这个数组也会变化,能理解吗?
08:06
因为他们都是引用类型的,好我们现在执行一下,同学们看。这时我们发现12 12输出的是20。没问题吧,那我再问大家,如果我把这个改成二。四请问这输出什么?是不是就是在原先你这个flash的基础上,找到第二个下边为二的,再取取到第四,那是不是第下边为二的是。他他本身就是这个了吗?下贝维二就应该是。这个取到第四一个,但是不包含4234,是不是就应该是这个三十四十。是不是这个时候应该是输出三十四十没问题吧,跑一个测一下。这个用的很多啊,三十四十,我再问大家,如果我这样改一下呢。如果这样改一下。我把这个地方改成一。
09:01
是。请问。这时。这时我这个时代12。是多少?是不是你得首先把这个slash求出来,那你那你首先先看slash是多少,Slash它切完了过后,它是从这个数组里面切到一是一就是它,四就它。一啊,这是一,第一个下边为一,下边为四,那就应该是这个元素。是不是代它是这三个元素,然后呢,你要在这三个元素里面把第二个和第三个求出来,第二个是哪一个下为零,下标为一。下边为一,还不行。这是它本身就三个元素对不对,下边为二是这是零,这是一,这是二,还切不到第三个,好,那你这个只能这样子,我把这个改一下,改成一二。对吧,这样子就比较好看了,那我这样从这个flash里面再切一到二,那就应该下边唯一就是它就是它,下边为二就是它,那就是它了,就30能理解吗。
10:07
这就是30,我们来看一下是不是十来12,是不是30跑一个。30果然如此,我再问大家一个问题,我再问大家最后一个问题啊,如果我实在是二。的第零个元素,因为它只有一个嘛,我把它改成了100。我把它改成了100,请问slash。还有A的数组是不是它对应的这个值都会发生变化?变不变?各位同学变不变?变不变。也就是说我通过十代12。访问到SLASH2第这个这个这个第零个元素,我把它改成100了,请问slash还有A对应的这个值变不变?其实也会发生变化,也就是说30这个值。30这个字不管是通过数组来看,还是通过LAS看,都会变成100,为什么?因为他们指向的是同一块数据空间,这个内存图我们画过的啊,这样。
11:11
这里就会同时就会因为啊这样说,因为还有这个slash。还有这个十来二,他们指向的数据空间是同一块。指向的。指向。指向的数据空间,数据空间。是同一个同一个,因此十来二改变了,这个改变了都其他都会都会变化。其他的其他的都会变化,都变化都变化。能理解吧?那也就是说,如果说这个时候我输出SLASH2包括slash。Slice。包括我们的宿主。它对应的这个30都变成了什么?100能理解吗?
12:05
给大家打印出来看一下。看看老师分析的对不对,注意啊,这个为原因是为什么我就没画内存图了,同学们应该能够分析出来,这是一个细节,跑一个我们可以看到。30的内容全部变成了100,大家看十代12。变了,LA这个地方也变化,而也变化了,原因就是因为他们指向的数据空间其实是同一块空间。就相当于说你在。指向的是某一个位置,代二。他也通过这个东西呢,也引用到这个空间了。理解吧,知识只是引用的具体位置大家不不一定相同,因为切片的时候切的具体位置大家不一定是一样的,能理解吧。好,这块呢,我就说到这里,好不好注意这个细节啊,好,这个案例呢,我给同学们整理一下,板述一下。
13:00
好,刚才我们讲的是切片。切片使用的注意,注意事项和细节讨论。好的,我把这一块呢给大家整理一下。然后刚才我们已经整理出来有这么几个细节,先把它罗列一下。对吧,先把它罗列一下,我们整理整理第一个细节。是不是?对吧,这是第一个细节。第二个细节是这。这个稍微的往里面挪一下,第三个细节就是。Capability,他是干什么的?第三个细节。切片。好,然后呢,这个还有一点就是切片,可以继续切片。刚才呢,老师举了一个案例来说明是怎么使用的。好,我把它也整理到我们的笔记里面去。刚才我们这个案例呢,给大家板述一下。
14:02
是不是在这?在这写的对吧?我把整个案例一并拷过来,那么哪里体现出切片可以继续切片呢?就在这里。看到没有?啊,这是对切片进行再次切片,而且刚才老师总结了一点,就是因为切片他们是引用类型,所以说当一个切片的元素发生变化,那么直接会影响到它关联的数组。以及他的其他的切片的这个数据的变化。好,我把它呢反述一下。请大家认真的体会一下它的用处。好,同学们,那关于切片使用的注意事项的第一部分,我们先给大家讲解到这里。
我来说两句