00:00
好,同学们,我们现在接着讲sla切片这个概念,那slash切片呢,这是功能里面特有的一种,呃,数据类型大家注意一下,它在使用的时候跟我们数组有什么不一样的地方,那同学们,我们来看看这个切片。好的,我们一边讲呢,人是一边讲一边做笔记对吧?好,我们下一个话题切片。听起来。呃,好像是吃的东西,但实际上不是吃的东西啊,大家看一下,我们还是老规矩,看一下为什么要切片,那么同学们看一个需求先,大家看到这里,我们需要一个数组,比如说现在我们有这么一个需求啊,同学们看这里。一个什么需求呢?我们需要一个数组用于保存学生的成绩,这个没什么错是吧,就说你定一个数组来保存学生成绩,这再再正常不过了,但是有一个问题,就说学生的个数是不确定的,我们一个班有几个学生不确定,可能是三个,也可能是五个,那怎么办?这个时候你用数组把。
01:08
好像。不太方便,你想想,如果你用数组,而这一个功浪里面的数组呢?它的大小是固定的,你把这个数组的空间开大了浪费,开小了不够用。那这个时候呢,Go浪他提供的解决方案就是切片。也就是说,通过这个小小的需求,同学们大致可以猜的出来,切片其实可以简单的理解成是一个动态的数组,但是它它跟数组还是有些区别的,后边我们会一个一个展开讨论,也就是说大家可以看到啊,当我们去需要一组数据,我们需要保存一组一组数据,但是数据的个数不确定的时候呢,就可以使用切片。明白这意思吧,就这么一个东西,好,同学们,我们先把这个概念给同学们。
02:00
进行一个处理板述一下好,为什么需要欺骗。好,我们把这里处理一下,为什么需要切片,给大家来一个标题二,刚才呢,我们简简单的提了一个需求,什么需求啊,就是我们需要。去保存个数不确定的学生。的成绩对不对。好,这是引出我们的切片解决方案,这里就引出我们切片了。那既然如此,那么我们就来看看切片的基本概念。切片。的基本介绍。我们来看看切片的基本介绍,有哪些需要同学们了解的,呃,这里呢,我给大家总结了几句话,大概有五点,第一点切片的英文叫slice,这个大家要记住,就切片的英文单词slice,第二个切片式数组的一个引用,诶,大家看到这个什么意思了没有?
03:05
就切片跟既然是数组的一个引用,那么切片必然就是引用类型。明白这意思吧。这一点就体现出切片是个引用类型。而且在进行传递的时候呢,它就自然遵守了引用传递的机制,那引用传递和这个值传递,我们他们的区别,我们是在前面已然给大家介介绍过了,这里就不再赘述了,好不好?第三点,切片的使用跟数组基本上是相似的。就基本上是相似的,但是肯定有不一样的地方,如果完全相同,那切片就变成数组了。所以说类似。呃,什么地方类似呢?比如说便利切片,访问切片的元素,还有求切片的长度都是一样的。但是还有些具体不一样的地方,后边我们会展开讲解。第四,一个切边的长度它是可以变化的,这一点是它跟数组比较大的一个区别,大家都知道,数组的长度一旦固定了,它是不能够变的。
04:10
你如果往这个数组里边加多,加的元素过多,超过它的范围,它就会越界,但切片不一样,它的长度是可以随着你数据的增加而动态的增长,因此我们说切片可以理解成是一个。可以动态变化的数组,当然它不是一,它不是,它不完全是个数组啊。第五一个大家注意切片的定义的基本语法是这样定义的。还是一个关键字,VAR变量的名称,实际上实际上这个就是切片名。对吧,你可以理解成是切片米。第二个呢,这个地方有数据类型还是你的类型,就是这个切片里面放什么东西,放T呀,还是float呀,还是一个寸啊等等,唯一区别就是这个地方同学们看它的这一个中括号里边不需要填长度,就是一个中括号就行了。
05:07
就不需要,不需要你写长度,比如说写个五啊,写个四,不需要了,你就写个中括号,一对中括号就表示它是一个切片,比如说这有个案例叫VRA,中括号int,那这个就表示什么意思呢?同学们,这个就表示A是一个切片的名称,这个切片可以放什么呢?可以放int数据类型可以放多少个int呢?不确定。你爱放多少就放多少,因为切片它本身是可以动态变化的。好,同学们,那通过这个地方呢,我们就简单的给大家说了一下切片的基本的一些概念,来板书一下。整理一下这几个点,第一点切片的英文要知道叫slash,第二点切片是一个引用类型。这地方我们我们要讨论的是切片,它是一个引用类型,注意一下第三点,切片使用和数组类似。
06:04
那既然是类似,就是说有相同的地方,也有不同的地方。第四点,切片的长度是可以变化的,因此你可以理解成它是一个可以动态变化的数组,对不对?你可以这样理解,大家就心里面就觉得比较简单了。第四一点,切片的基本的定义,它的定义的基本语法是这样子的。理解啊。怎么回事?好,我我往那边挪一下吧。把它移动一下。好,这是五点,那有了这五点过后呢,下面必然老师就给大家来一个切片的快速入门。快速入门,你。那我们来看一个快速入门。呃,直接来体验一下切片的使用。耶。啥意思?好,切片的快速入门,我们来看一下切片快速入门,这是一个案例,演示一个切片的基本使用。来我们走一个。
07:07
协同代码。老规矩在我们这一个chapter。七里边儿新建一个文件夹。我们比如叫slice slice DEMO没问题吧,DEMO01,因为有可能还有零二,我们新建一个文件叫面顶购。好,然后呢,我把前面的这一部分拿过来用一下。好,同学们,我们来看看这个案例,我们演示一下。我们也演示。演示切片的基本使用。啊,基本使用。来找一个案例吧,比如说比如说我们先这样子来做啊,我们先用第一种方式,我们先做,做一个定一个数组。
08:02
第一个数组,这一点大家都都很清楚吧,比如说我一个int数组。这个数组大小为五,没问题吧,然后呢,我给它来一个初始化in。比如说这个数字里面放的是1223366。九九一共是。五个元素,这是数组,那么下面呢,我们看切片,我现在声明或或者叫定义一个切片。这个切片我这样写的。这个切片我这样写的,大家看,大家看看能不能看懂啊VR。或者直接就slash。轴等于int。然后一三大家看这是什么意思。这个就是一个切片了。这个就是一个切片,那么这个切片这这种写法是代表什么意思呢?我做一个介绍。
09:00
我写到上面去。我对这个做一个说明好不好,注意听讲啊,做一个说明,1SLICE就是切片的名称。就是切片名。这个比较简单,第二点注意看这一句话。这个代表什么意思呢?注意听这个表示表示slice引用到,注意听引用它引用到哪里呢?它它是直接引用啊,它自己直接指向它就行了,并没有进行一个指拷贝,它引用到INT2这个数组的这个数组的第几个元素,第二个元素。第二个元素到第几个元素呢?到第三个元素到,呃,这样写,注意听它是这个一代表,这个一代表什么意思?这个代表就是从这个数组的下标为一的这个元素开始,开始到哪里结束呢?到下标为三,下标为三的这个元素值,但是不包含三。
10:12
不包含,下边为三。这个有点暴力,实际上就是相当于说这个是他引用的,呃,引用下标的起始的这个下标,这个代表引用的中指的那个下标,但是不包含这个三。让我写一下。表示引用一个数组第几个元素呢到。到。到下标。我这样写啊,引用就是代引用数组的。数组数组的下标。从那里开始引用啊,这样写这个还有点不好描述,对不对啊,就是表示s less,引用int而为这个数组。
11:02
数组下标从哪里开始呢?第三点。第三点引用。引用。这个引用啊,引用引用int数组的下起始下标这样写起始下标。其实。哎,这个还。还找不到。其实。诶,起始开始的始啊。其实下标。为几呢?为一终止下标,就最后的一个下标是什么呢?就终止下标,最后一个下标啊这样写最后最后的下标。下边为几呢?为三,但是不包含三,这要特别注意,但是不包含。不包含。
12:00
三那也就是说,其实就是引用下标,下标唯一是不是就是22。下标为三是哪一个呢?是66,但是不包含下标为三的,那其实就是二二和三三能理解了吗?注意啊,它是不包含这个下标为三的,就是中最后下标是三,但是不包含三,不包含三那就显然是22和33了,能理解吗?好,注意是引用好,现在呢,我们把它输出来给大家看一下。Print我们先看一下数组,Int数组本身。Int AR这个数组本身是什么一个情况?T这个没问题吧,我们再把下面的这个sla。Slash它是哪一块呢?把它输出来这个也没问题,对吧,我们再说一下这个slash目前它的长度是多少。它的长度呢,其实跟前面求数组的长度是一样一样的,那就这样写就行了,而且呢,这个切片还有一个东西叫做容量。
13:10
我这样写slash的内容。内容是。就他现在它或者叫元素是好吧,元素是哪些,呃,Flash的长度。它的长度就是它一共有多少个元素啊对,这样写吧,元素个数是。元素个数是没问题吧,还有一个呢,就是slash的容量。它有个容量的概念。的容量容量我们通过一个内置函数叫CP。CP就可以算出来。什么叫容量呢?所谓容量,就是这个切片目前可以存放的最大个数的元素。就是目前它可以存放最多个数的呃,最多元素的个数。
14:03
但是它这个容量是可变的,注意这个容量是可动态变化的,就是切片的。切片的容量是可以动态变化的。变化什么意思呢?动态变化就是说当它容量不够的时候,它就会自动增长。如果你再给他加,再加的他又不够,他又自动增长,明白意思吧,那么我们看一下手册里面是怎么说这个,呃,Cap cap capability的,这个cap它的全写叫capability。Cable。Ker b。立体这个单词capability就是容量的意思,那么我们看一下手册是怎么说这个函数的,打开这里,我们找到这是一个内置函数,所以说找build in。然后呢,我们搜一下这面有个CP函数,看这里。内接函数CP返回V的容量,这取决于具体类型。
15:04
对吧,取决于具体,比如说切片的容量。切片的容量就可以通过CP来进行来进行计算capability,好了,我们现在呢,来运行一下这段代码,我们看看。就是此时此刻,目前这样写的话,这个元素是什么?个数是多少?容量是多少?其实这个元素我不执行,大家都知道应该是什么呀。它的元素应该是哪个,根据刚才老师讲的,起始下标为一,那就是22,中指下标为三,66,但是不包含三,因此是22 33,说这个地方它应该输出22 33这个地方应该输出几啊?应该输出二,这个地方呢,就不好确定了,这个一般来讲哈,我说了,一般来讲capability是长度的两倍,但是也不一定。为什么它是两倍呢?因为高浪的设计者呢,他认为,呃,你到了二过后,你有可能继续再增加,再增加的话呢,我这个四就可以。
16:09
可以不用变化,在不用变化的情况下,还可以再增加,也是它的容量,不会说你增加一个,我给你加一个,增加一个加一个,不是他预先先给你增加一点,等到你不够的时候,他有一次性再给你分批一些空间,这样效率呢就比较。高一点,他不会说你加一个增加容量增加一个,它不会这样子的,明白吧,好了,那这个呢,一般来讲,如果你的容量是二啊,一般来讲它是四,但是不一定不一定好,所以说我就不写了,那同学们我们先运行一下看效果。打开它,我们CD点点倒上移,然后CD到我们的slash。DEMO01,然后go wrong。命点勾跑起来,我们看。我们通过这个运行呢,我们可以看到此时的情况这样子的。数组就是int,数组是这些没问题,Flash的元素是这个22和33,跟我们分析的完全一样,它的个数是两个,这个肯定吗?你数嘛,二十二三三不就两个元素吗?它的容量为四,看到没有?
17:16
我说过它的容量一般是个数的两倍,但是不一定啊,不一定,比如说你的元素越来越多,比如说你的元素到了33。它的容量可能就不一定是66了,因为他觉得你33再加一个。才34个嘛,我给你开这么大容量有点浪费了,他有可能是1.5倍,怎么样子,但这个呢,其实我们并不关心,就容量你不用关心,它会随着你这个元素的增加,它会自动的变变变变大的,好吧,好同学们,那这个呢,就是我们的关于切片使用的一个快速入门案例,大家简单的。理解下线。我把这块先板书一把。我把这块先板书一下。
18:00
好的。扔到我们的这个地方去。对吧,尤其是老师说的这几点,大家一定要注意,就是这说的123这三点,大家注意一下,然后它这个运行的结果,运行结果。运行结果是什么呢?我把它也给同学们放到这。这样子大家一看案例,再看一个输出就一目了然了,对吧,主要是这块大家知道这块。这块还有一个容量。数组的数组没有这个容量的概念啊,同学们,数组是多大就是多大,它是固定的。那么我把这个运行结果也给同学们放到这里。好,同学们,那关于切片的一个为什么需要切片,切片基本介绍以及切片的一个简单的快速入门案例呢?就给同学们先介绍到这里。
我来说两句