00:00
我们发现scda的模式匹配呢,可以对一些特定的集合类型,它里边的具体形式做一些各种形式的匹配啊,那我们前面匹配了数组,接下来我们再来看另外一个常见的序列类型,类型list,我们来看看怎么样去匹配一个列表,那如果要匹配一个列表的话,其实整体来讲一种方式就是嗯,前面我们匹配数组非常的类似啊,我们直接用一个for循环,把所有的list的放在一起,直接一个打印的测试啊里边啊对应的这个list,我们可以定义一个LIST0,同样可以定义list的一零。后面我们继续定义LIST000,好,我们也可以定义LIST110,然后我们再定义一个LIST88。
01:12
好,有了这些基本的一组例子的定义之后,那接下来我们就来看一看。类似于之前的测试啊,直接得到一个result。List做一个match,那么case如果说当前就是一个元素,然后里边是零,如果就是LIST40的话,那没什么好说的,给我们直接匹配上一个零数组啊,零列表,然后对应的如果是两个元素的列表的话,我们同样可以定一个list X y。一个元素付给X,二个元素付给Y,我们这里可以直接做一个打印输出list X y加上X的值加上Y的值啊,那跟上面也是它的类型也非常的类似啊,如果说我们要求是以零开头,剩下的元素不聚量线,剩下的个数不限,是以零开头,哎,那是零,然后下划线心下划线相当于是一个通配符,而且表示后边是参数可变啊,个数可变那就加一个心就可以了,那这里边我们就相当于是LIST0开头,后边二点点啊,那最后我们再来一个list的就表示什么呢?就表示当前list里边只有一个元素啊,只要是一个元。
02:52
度的这样的一个例子的,我们都可以拿过来做这样的一个输出,然后输出的呢,就是。List a,把A的值放在这啊,我们这里是有一个LIST88,那另外我们还可以测一下其他类型的这样的list so,我们看看是否能够匹配的上,最后我们再给一个默认的场景下划线,Something else,那接下来我们还是直接打印当前的result,看看结果怎么样,下面我们加一行个线。
03:38
运行看一看结果。我们看到这里边输出的结果LIST0,当然匹配上,就是我们第一个输出的零,然后LIST10匹配的就是XY啊XY10,然后LIST000呢,前面的三个,前面的两个匹配不上,但是第三个以零开头的列表匹配上了零,然后下划线芯我们输出的就是零点点点,那么LIST110这里边我们没有任何一个能够对它进行匹配,所以输出的是something else,而88和hello呢,里边有一个元素,所以都可以匹配list a啊,所以整体来讲这种方法和上边ara这种写法完全类似,大家可以用同样的方式定义。
04:29
到底有几个元素,到底每一个元素它的值是什么,或者说哎,我们要求它有什么样的特征,这些都可以直接判断出来,那另外呢,对于list还有一种做模式匹配的方式,这种比较特殊一点,我们把上面这个叫做方式一,下边我们叫做方式二,方式二的匹配主要是利用了特list里边一个非常特殊的。
05:01
运算符,那就是双冒号,哎,我们看一下这个双冒号的定义方式啊,所以我们就单独的定义一个例子吧,第一个一二五七二十四。好,那接下来我们把这个list做一个打印,我们之前是没有定义过list吧,没有定义过,所以这里边直接叫list是没有问题的,那现在我们就直接看一看,做一个match。我们的语法非常的灵活啊,也可以面直接定义一个函数,也可以在一个for循环里边用一个变量值来接收list match,呃,就是当前这个list进行match case的一个表达式的值也可以呢,我们在这里直接做一个match case里边就直接print line打印输出一些话啊,那这这些操作语法上都是没有问题的,只要能输出结果就可以,那比方说我这里可以直接写一个first,然后双冒号。
06:09
然后接下来second双冒号,哎,那接下来呢,听一个rest,它表示什么呢?哎,之前大家还记得双方冒号的这种方式,我们其实是在创建列表,或者是在连接多个列表的时候可以用这种方式,呃,连接多个列表的时候是需要用三冒号啊,那我们如果要是在原先的一个列表上追加新的元素的话,可以用双冒号,哎,那所以现在这个表示什么呢?双冒号的结合顺序是从右到左,所以当前rest本身应该是一个列表,然后呢,左边追加了一个元素second,在左边又追加了一个元素first。它其实就代表我们之前定义的第一个元素必须是first,第二个元素必须是second,那剩下的呢,剩下的构成一个列表就叫做rest啊,所以这里我们可以直接把这个打印输出,你看到底是什么样子啊,比方说我们这里叫做first first其实是个变量。
07:21
然后另外。Second second,还有。Rest啊,别的情况我们就不予考虑了,直接来一个默认情况的输出,输出的话我们直接print来一个something else,好啊,那大家会想到什么情况下它才会是something else呢?哎,当然就是我们这种定义的话,至少应该有第一个元素和第二个元素。那最后rest有可能是空列表吗?空列表的话就是new,如果要是连两个元素都没有的话,那就相当于会走到这里来,我们先运行一下,看看当前的这个列表输出的是什么内容。
08:13
我们看到当前输出的就是first是一,Second是二,Rest是五七二十四构成的列表啊,那如果说当前我们这个元素非常的少。我们把上面这个叫做例子的一,现在这一个只有二十四一个元素的话,我们再运行一下。不然它就变成了something else了,因为这里边我们匹配不上有first,有second,还有rest这种场景啊,这个大家可以注意一下,这种方式在列表的匹配里边经常会用到。
我来说两句