00:00
所我们介绍的数组和列表,其实本质上来看的话,都是属于序列,都是属于sequence,所以在skyla的集合类型系统里边,这是三大类里的S这一类,而接下来呢,我们要介绍的就是另外一大类集合类型set set直观上来看其实就是一个数集,就是把一堆数放在一起就可以了,所以他能做的操作呢,其实比序列类型要要简单很多,那最大的特点其实就是里边所有的数据是。没有顺序是无序的,而且是不可重复的,这是set最大的特点。那当然了,在盖拉里边,Set同样也分成了可变不可变的两种set。这里大家需要注意,之前我们讲的数组和列表两种可变不可变的类型其实是名称不同的,而对于set而言,可变不可变的数集的类型呢,都叫做set。
01:04
啊,所以这个时候大家就必须要区分哪个包下边的set了。默认情况下,SC里边使用的是imutable,就sc collection imutable.set。如果说我们想要使用可变的集合类型呢,那就必须要显示的说声明当前是multipleable.set啊,这个大家一定要需需要注意一下啊,所以接下来我们首先还是在代码里边先来测试一下不可变的集合。新建一个object s06。Immutable at,首先我们第一点还是先来做一个创建,创建set,那这个创建的过程其实是非常简单,你定义一个SET1啊,那可能我们就又想到了,那是不是可以直接去new set呢?在这里看的很明显这个set是一个。
02:15
好,首先这Di里边定义了啊,从定义了这这个类型默认就是imutable.set啊,所以这就是一个不可变的,这没有问题,但是后来之后我们看到了它是一个特征it啊,所以直接我们没有办法去创建它的一个对象实例,那怎么办呢?哎,没关系,下边同样也有啊生对象对吧?哎,所以这个半生对象的使用其实跟前面我们讲的其他几何类型都是一样的,那就是直接使用前的单生对象名称,然后加上小括号,小括号里边传入所有的值,我们随便给一些值,然后也可以里边有一些重复,知道最终重复的数据都会被去除掉。
03:05
接下来我们可以直接print line set1做一个打印,看一看效果怎么样。大家看到这里边得到的值只有五个13,还有23出现了两次,那就都被去除掉了啊,所以经常我们可以使用set这个数据结构来做一个数据的去除啊,这是关于set放件。我们打印一行分割线,然后接下来看下一部分,那就是B项set里边去添加元素。加元素,这个也非常简单,对于set呃,可变的set类型而言,添加元素的方法那就是直接一个加号。啊,这里我们直接加一个20,那就说明是把20加到了里边去,那那需要注意一点的是,既然是不可变的类型,那当前其实最终还是要返回一个D的类型啊,那所以必须要有另外一个set来做一个接收,而SET1本身它的值是不变的。
04:19
我们看到把这个做一个复制上边啊,DE2的值也做一个打印,运行一下,我可以看的非常的明显。一还是上面的值,SAT2多了一个20。啊,当然了,这种写法方法调用可能会显得有点有点不舒服啊,看着比较奇怪,那大家如果要是直接写成这样的形式的话,可能会理解的更加的清晰,这就相当于sat直接添加了一个元素嘛,这个加大家也不会理解成数学意义上的算术加,肯定就是添加一个元素的意思,那前面我们这个list和array里边还得考虑你到底是往末尾加还是往开头加,现在set根本就无序,那当然就无所谓了,哎,那有同学说这看起来好像它是往开头加了呀,那其实这个完全没关系,如果我们加另外一个数的话,再重新运行一下。
05:17
大家看他家的位置就有可能完全不一样了啊,所以我们并没有必要关心到底是朝哪个方向去加,当然了,这里边如果要是我们想要写成空格的形式的话,只能是SET1去加129,你如果反过来写的话,那就不对了,因为当前的一个int类型的值是没有它的点加方法,只能去做算术加的这个计算,不能去加一个集合类型啊,这是大家需要注意的。介绍了集合that里边去添加元素,那接下来我们再来考虑一下合并两个集合的做法,也就是合并set合集。
06:05
就需要我们首先有两个集合了。定一个SET3,因为前面SET1和SET2这个数去相似的东西太多啊,所以我们这里边稍微的换一个,我们定义一个SET3里边大家可以看到这里边有一些数据,我们可以直接copy过来,比如说。啊,前面我可以给一个不一样的数据,然后十三二十三五十三六十七十九。然后接下来。我们可以定义一个SET4做一个合并啊,大家知道本身这两个个SET3和前面的set set2啊,他们俩本身都是不可变的集合,所以他们自己肯定没有办法改变,那我们最终呢,要把得到的结果再付给另外一个集合,所以我们当前就是SAT2。
07:05
啊,那有有可能想到了,那是直接SET2加三吗。我们看到这里可以直接这样来写,是如果这个时候我们啊SET4的结果直接打印出来的话,你会发现它直接报错了,对吧?就如果说这里边要做加的话,你只能加一个元素,你不能加一个集合,那这里边如果要填合并集合怎么办?哎,当然就是搭加像我们前面合并两个列表一样的类似的一个一个方法啊,那如果做了这样一个操作的话,接下来我们还可以。啊,对应的SET2和SET3的值也看一下,确保不能没有改变。我们可以看到SET2还是上面的值,SET3还是我们定义的啊,当然这个顺序跟我们一开始定义的不一样,对吧?因为它本身无序嘛,但这六个数是没有变的,然后它俩添加在一起之后,我们会发现相同的数据做了一个去重13啊,只有一个了,但是不同的数据呢,全部保留在了一起,所以当前集合就增大了啊,这是当前做两个set合并的过程。
08:20
最后,我们再来考虑一下删除元素的成。那对于不可变集合而言,要删除集合,删除元素自己肯定是不变的。那同样也是要把。得到的结果付给另外一个结做付给另外一个set对象啊,所以这里边我们定义一个SET5,比方说我们基于这个SET3要做一个删除,删除怎么删,删呢?先添加有加,删除自然就有减,它本质也是一个方法调用,我们要删掉13,接下来看一下当前的THAT3。
09:00
有没有改变?另外THAT5是什么?运行一下。我们可以看到SAT3没有任何的改变,跟上面是一样的,SAT5在它的基础上少了一个13啊,这就是关于不可变集合set的所有操作。
我来说两句