00:00
除了前面我们介绍的集合的一些通用的属性和常用的基本操作之外,那还有大多数的集合都可以调用一些特别的方法,能够生成一个新的集合啊,那这种方式呢,我们往往就叫做衍生集合的一些操作,那这些包含哪些呢?啊,就是比方说我们可以获取集合的头和尾,这些操作,主要有头有尾的话,那主要是针对list类型的一些集合来做的操作啊,那另外还可以获取集合的。第一个元素和最后一个元素啊,这也是可以跟这个头和尾有点有点相似,但是呢又略有不同啊,那后面我们看到还可以这个翻转集合,这当然就是集合必须要有前后顺序了啊,也是针对例子的会比较常见,另外还有可以取前N个或者后N个,或者去掉前N个或者后N个保留剩余元素。这些上面的操作一般都是针对list或者seek相关的一些集合啊,线性的集合,有序的集合,然后下边的一些呢,那就是其他的一些操作了,比方说我们可以对于两个集合求交并补啊,他们做一个并集,交集,还可以做差集啊,最后呢,我们再介绍两个比较特殊的用法,就是拉链和划窗,接下来我们分别做一个介绍,在代码里边具体来做一个测试。
01:26
新建一个测试的。ST分离对象S12,我们现在考察的是衍生集合arrive action没方法写出来,先把对应要测试的点放在这里。然后接下来我们就一一做一个考虑了,现在既然是要做操作啊,我们首先还是你记一个list吧,因为面的很多操作都是针对列表啊,或者说这个序列啊seek而言的,最常见的当然就是list。
02:09
一开始的这个例子呢,我们还是直接定义成汇过来,给几个参数直接放在这儿,然后接下来呢,我们再定义一个,因为后面涉及到有一些操作啊,至少要两个合类型才能够一起做操作的啊,那所以这里面我们单独的再定义出来啊,然后这里边我们会议跟前面有一些有一些相同的元素啊,因为大家知道后面我们可能会有比方说交并补相关的一些合操作,比方说三七。二啊,另外的我们就随便给了啊。好,随便给一些元素,然后接下来我们就来看一看,第一个要获取集合的头,哎,这个其实大家想到非常简单对吧,这个就是方说例子一要获取它的头,哎,那其实就是调用一个方法,或者取它的一个属性吧,所以我们是调了一个方法叫做head,来看到了这个head,这个方法啊,是terrible like里边的一个方法,就是你只要是可迭代的类型,所以它其实是一个通用的方法。
03:20
那这里边调的就是什么呢?就是当前用这个迭代器ER的next直接把第一个元素拿出来就可以了,所以这就是它的头,这个其实也并不是列表特有的,但是一般呢,我们是在列表里边才去考有序的集合里边才去考虑头尾之间的关系啊,所以还是在列表里面比较常见,那另外就是尾啊,那有同学可能发现了这样一个氦,明显就是一个元素啊,为什么我们说它是生成了一个新的集合呢?Derived collection呢?这里主要其实是针对后面的这个尾而言的啊,那自然大家就想到了前面说的这个是头,那后面这个尾不是had,那尾是不是就有一个Q啊,所以大家看到这个名字都非常的简单,用起来的话都是对应的一个方法。
04:16
这里大家需要注意,L指的是什么呢?并不是当前的最后一个元素,而是指的是不是头剩下的。都是尾,哎,所以就是去掉头之后的,我们看最终它这个底层这个方法调用啊,直接就是DROP1,那相当于就是把我们当前最前面的一个元素直接扔掉,然后接下来剩下的那其实是一个集合类型,所以我们在这里可以直接运行一下,看看当前的效果是什么样的。大家可以看到had不出意外是一,那么Q呢,得到的是一个list,是除了一之外剩下的所有的元素。
05:00
所以我们这里边其实得到的是一个新的list。而自然了,之前的这个例子的一是不变的啊,我们定义的是一个不可变的列表,所以得到的新的呢,我们可以直接打印,也可以把它附给一个另外的历史的变量,那接下来就可以做进一步的操作啊,这就是关于这个头和尾啊,生成衍生集合的这个过程。那自然大家就想到了,那你既然这个头和尾获取不到真正的最后一个元素,那如果我真的就想获取最后一个元素该怎么办呢?那就只有不停的去掉头,去掉头对吧,不停的获取这个尾,呃,那那一直要等到最后才能拿到最后,呃,真正意义上我们序列里边的最后一个元素,那假如说我现在就想直接拿到最后一个元素,怎么拿呢?哎,现在这个问题就来了,也非常的简单,这我们用例四二吧,那最后一个元素有另外一个方法叫做last啊,那所以目前的这个last又是什么个关系呢?
06:01
这时候我们看到啊,这里边定义的这个过程跟我们刚才说的过程是类似的,它里边其实就有一个while循环,本身干了一件什么事呢?哎,就我们先拿到当前的ta ta不就是。除了头之外都是尾吗?然后接下来我就不停的拿当前ta的ta,那大家想是不是每一次因为除了头就是尾吗?每一次拿ta的ta,是不是就每一次排除掉头,排除掉一个元素啊,直到当前的呃,就是我要判断的这一个,相当于剩下的这个列表已经变成空的时候,那最后得到的这个元素是不是就是我当前的这个?最后一个元素,当前的had啊,就相当于就是我当呃原始的序列里边的最后一个元素,对吧?哎,从源码里边我们也能看到实现的思路其实是非常接近我们刚才说的这个过程,这就是取最后一个元素直接掉last,那对应的还有初式元素,那大家要注意这里边初始元素指的并不是。
07:07
第一个元素,第一个元素我们已经有害的了吧,那初始元素指的是什么呢?啊,前面尾,那是不是头就是尾,那现在初始元素指的是不是最后一个的,前面的都叫初始元素,呃,所以就刚好跟前面这个对应了啊,前面这个是我们只截取头一个元素,剩下的都叫尾,而现在呢,我们是只截取尾就是最后一个元素,剩下的前面都叫初始数据。那现在同样有一个方法来处理这件事情,初始数据,这个方法叫做啊,那所以现在啊,我们做一个打印。看的非常明显,我们LIST2最后一个数据是19,除掉它之外,前边的所有数据就是它的unit。这就是关于初始数据相关的这些操作,呃,那接下来我们再来看其他的一些简单操作啊,反转非常简单,LIST1接调一个方法reverse搞定了啊,那底层的话我们也能想啊,肯定就是一个循环也把它搞定了,那在这个循环里边呢,我们用到了。
08:18
大家看这个列表,产生一个新的列表,做这个,呃,做做做这个,添加当前had这样一个操作的一个一个。叠加每一次循环里边都做这样的一个操作啊,最终我们就实现了reverse翻转的一个功能,如果我们自己写的话,也可以实现类似的功能,这是我们打印一下看看结果啊。那显然就把前面的这个完全翻过来了,最后一个数据变成了一,另外呢,我们还可以看绿色里边可以取前N个元素或者后N个元素,那取前N个元素这个非常简单,LIST1,比方说一个方法看到叫做take take边传一个三,哎,那当然这就是直接拿它的前三个元素,我们前三个元素那就是135。
09:10
那另外呢,我还可以直接取后边的某几个元素,刚才大家也看到了,有一个take right,从右边开始举某几个元素,比方说我们take right4。说的当然就是从右边开始的最后四个元素,就是五七二八十九,顺序还保持原来的顺序,这个是不变的,那与之对应呢,还有就是去掉前N个元素,或者去掉后N个元素,那之前我们是取出来,那现在呢,是把它删掉,剩下的取出来,对应的我们这里边同样可以调用,不是take了,现在这个叫做。现在叫做,那同样后边也会有一个呃,Operateright。
10:03
打印一下。我们看到135是取前三,那剩下的呢,七二八十九,这就是剩下的drop对吧?哎,那五七二八十九,这是取右边的后四个,那去掉它之后drop之后得到就是最左边的两个一三,哎,这个其实整体来讲概念还是非常的清晰的,所以截止到这一部分呢,这都是关于一个集合类型去做的一些。基本操作,它可以衍生出另外一个集合类型。
我来说两句