00:00
我们已经知道怎么样去访问数组里边的元素了,呃,那接下来如果说我们想要把数组里边的所有数据都做一个打印输出,我想同时看到所有的数据,应该怎么做呢?有同学可能说,那就按照我们前面这个吗?Print line0 print line a1234每一行呃,都做一个输出不就完了吗?啊,那当前我们这个数组是只有五个元素,那要有500个元素呢?难道我们直接写500行代码吗?呃,当然没有必要,所以自然我们就想到了,对于一个数组,如果想要做变例的话,那最好的方法当然就是一个for循环了。所以接下来我们用循环来试图做一下数组的例,数组的便利啊,那首先我们来介绍第一种形式啊。这种方法其实就是最普通的一个循环,按照我们比较熟悉的方法直接来写,在Ella里边我们要写一个for的推导式,就是I作为一个循环变量,那到底从从多少到多少呢?哎,我们想到要访问当前的数组,下标从零开始访问,然后接下来,诶,我们可以直接吐当前的步数不是应该有lengths吗?那就应该是to lengths减一对不对啊,当然其实我们没有必要写这个lengths减一,就大家之前在Java里边啊,一般情况下,呃,我们习惯的那种写法,其实在Java里边有时候我们也是就直接I初始值等于零,然后就直接I小于。
01:45
瑞点lengths不就完了吗?啊,那这里面我们怎么表示不包含这个lengths呢?明显可以直接用until包含的这种方式,这里边可以就是背点lines对吧,直接把这个写出来,然后里边要做打印的话,咱就是inline当前啊array I问道出来就可以了的区别上面我们还是做一个分界线。
02:17
现在我们可以看一下当前的效果怎么样。啊,非常的明显啊,就是第一个元素前面我们的A瑞零和最后一个元素A瑞四做了更改,其他中间三个都是零,那这个其实整体来讲是最简单的一种实现了,非常好理解,其实在这里还看到了啊,就是这里边爆黄了埃idea尔直接是有提示的,就我们可以更简洁的表示它的含义,哎,怎么样更简洁呢?啊,当前的这个AR瑞里边有一个方法叫做Indies。哎,这样的话,In利is,字面上理解这表示什么呢?就是所有的索引吧啊,所以当前我们可以直接把它改成I,就要0Q啊瑞典length了,直接掉瑞典,大家看到Indies点进去的话,其实我们就会发现这是like下边的一个方法,它返回什么呢?返回一个range。
03:19
它就是0UNTIL length啊,所以大家看之前我们说for推导式里边这样一个表达,这不就是一个返回一个range吗?哎,它返回的就是它,哎,所以这就没有问题了。呃,我们就不再写画括号了,直接一个打印。我们会看到得到的结果自然还是一样的啊,那接下来我们再看其他的方法,这是最容易想到的普通的这种for循环,那另外还有一种情况呢,其实在Java里边大家应该也见到过,就是所谓Java里边有这个增强for循环啊,那这种增强for循环其实就是从scla这种语法里边借鉴过去的,前面我们讲for循环的时候也说过啊,其实访问一个集合里边的元素,没有必要非要去便利它,比方说你是有索引的话,没有必要去便利索引,因为我们根本就不考虑索引,只是想把所有的数据打印输出,那我们可以怎么样去访问呢?那就是直接遍利,直接遍利所有元素可以了,哎,所以这对应的Java里边就是增强for循环的写法。
04:42
这个我们可以看一下,在scale当中写法就是这个就不是爱了啊,不是索引了,就是当前的元素element,然后啊,直接从。还记得在Java里边是冒号,是在skyla里边,冒号表示的是当前。
05:02
某个参数或者变量的类型啊,或者返回值类型,所以这里边我们不能用冒号,那用什么来表示当前的这一个,呃,增强放循环的功能呢?其实跟之前推导式里边一样,我们还记得吧,还是一个箭头,只不过之前这里我们后边是一个range嘛,Range也是一个集合类型啊,那现在我们不从range里边拿数,直接从当前这个ara里边拿数不就完了吗?因此我们辨论一下A2。然后直接line从前的element就可以了,不用独在基于它的所有位置去访问了。这里我们前面还是来我们这个用一个分化线把它分隔开。你看是否能够正确得到结果,大家看到没有问题啊,这是我们前面定义好的瑞二的所有元素。接下来我们再来考虑另外的便利的方法,第三种回忆,Java当中所有的化集合类型其实我们都可以使用,呃,我我们知道这个collection它是继承自able类型的嘛,呃,Interable接口的嘛,所以所有的集合类型啊,其实都可以去。
06:19
访问到一个eerator,一个迭代器啊,那么在这个Java里边,我们使用迭代器,那就可以不停的判断当前它是否有has next,是否有下一个,只要还有下一个,我就把当前的下一个拿出来,做一个访问,做一个打印不就完了吗?哎,所以利用迭代器去做当前集合的所有元素的便利,这也是一个常用的方法。那同样在skyla当中呢,也保留了这种方法,跟Java几乎是完全兼容的啊,所以接下来我们就看一下这个迭代器的使用,那当前首先我们定义一个迭代器啊,我就把它叫做ER或者叫eerator,怎么样得到呢?非常简单,直接AR,大家看到它下边就有一个erator,有一个这样的属性,那直接把它拿过来就完了啊,接下来。
07:11
那就是最一般我们习惯上用在写的时候用一个while循环,因为里边我只要判断的条件就是它是否has next,然后如果要有的话,那直接print line当前啊,Next就可以了啊,所以这个过程其实也是非常的简单啊,那最后我们再来一起啊,直接说一下另外的一种。便利的方法,这个相对来讲可能会稍微的特殊一点,就是在加当中可以直接啊OE方法。调用for each方法啊,所以整体来看的话,那就那不是一个for循环了啊,而是直接调用方法,我们看到这里面调用的这个for each方法,其实是在这个index的seek optimize下边有这样的一个for意识方法实现,那当然了,其实本身这个啊,它是override了,Like下边的方法,所以我们就知道了,在skyla的集合类型里边不是最顶层。
08:25
我们看到啊,最顶层都是able吗?哎,所以当前的这个able like当然就是它相关联的一个特征了,那就是所有的集合类型应该都可以调它的for each方法,只不过具体的实现可能会有所不同啊,那这里边,呃,我们看到这个for each里边要传的啊,要传的是一个函数F,它表示我们当前。每一个方一式不是每一个吗?那就是对于每一个当前集合里面的每一个元素,到底要干什么事情,要干什么操作,那我们现在这个函数要不干什么操作呢?当前的函数当然就是我可以直接写一个拉姆达表达式了啊,当前要传一个element int类型的element进来,对吧?就是对于我当前集合里边的元素,每一个都是I是。
09:20
行int类型吧,然后我接下来要把它做一个打印输出,那这样的写法其实我们也知道了哈,那是不是就可以直接把它,我们现在把这个RA真也做一个for each啊,那如果我直接这么table键的话,它会直接把它翻译成就是我们前前面这个for for循环增强for循环的这种写法,它俩其实完全等价的啊。那或者我们这里边直接这样的一个for,然后。里边的这个写法可以省略掉当前的类型,因为你既然是int类型的数组掉for,那肯定元素。
10:00
就肯定都是都是一个int类型了,哎,所以这个可以自动做推断,然后另外呢,在后面只出现一次,那是不是当前可以用下划线代替啊,然后另外我们推推断出来,最后是不是就只是想要对每一个元素做一个普普line操作,哎,所以之前我们按照。当前的这个函数最简啊,质简原则其实就可以直接把它简化成一个print line,把这个函数传进去就完事了啊,就是我们当前这个各种不同类型的这种方式,我们可以直接做一个打印输出,大家看到。都可以直接把对应的数据做一个遍历,然后打印出来,那最后呢,我们还既然是提到这个方法调用,需要给大家再提另外一个用的方法,常见的一个调用的方法啊,就是如果说我们前面是做了一个控制台打印,如果说我们想把它。直接转换成一个string,所有的数据转换成一个string连接在一起打印出来的话,那怎么样去做呢?
11:04
第R里边直接给我们提供了一个非常方便的方法,那就是mix,就之前我们也已经看到过这个方法,For循环里边给大家用过,这里边它要传一个当前的连接符连字符啊,那比方说我们传一个两个横线得到的结果就是。大家看到就是这样的一个把所有元素按照双横线连接在一起的一个字符串啊,这也相当于是自动底层帮我们实现了一个便利的过程。Mixt string本身这个啊,其实是sable ones下面的方法,那我们知道所有的集合类型顶层是able,那么它呢,又继承自traversible,哎,所以当前这个travers onces也是。混入的一个就是当前这个可变利的集合类型啊,混入的一个特征,那当前自然都可以实现对应的方法了,这就是关于集合遍历不可变数组变历的过程,当前我们只是针对不可变数组做了这样的一个介绍,那其他的数据类型。
12:12
我们发现,呃,当前调用的这些方法其实并不仅限于数组或者不可变,那其他的数据类型当然也可以做这样的便利了。所以我们这个便利的过程其实是通用的啊。
我来说两句