00:00
元组或者集合类型做模式匹配,一一种情况就是我们说的可以在变量声明的时候直接匹配,相当于做了同时的赋值,这个非常的灵活。那另外还有一种,然后好用的方式是什么呢?其实也类似于是一种变量的声明,不过是在报推导式里。For推导式中并行模式匹配,那这是什么意思呢?嗯,比方说我们现在可以定义一个。元组类型的list啊,它的类型我们完整的写出来,里边元素都是一个元组,String int类型的元组,我们给它赋一个初值,里面啊应该是什么样元组呢?就像我们之前一个A一个值,然后一个B对应的有一个数值,C对应有一个数值。
01:02
这样的话,接下来如果我们想要对它去做一个,做一个便利,或者做一个对应的操作的话,呃,那自然我们讲到最常见的,我们把这个叫点一。呃,原本啊,便利方式当然就是一个for循环直接搞定,类似于二当中的增强报循环,一个元素从类似里边拿出来,哎,那这里边我们要打印,打印里边个。一个元组里面的两个值的话,那当前当然就是element r_一,然后再加上。我们空一格加上element点下划线二。因为第一个元素下划线一本来就是string嘛,所以说这个我们前面不用再加一个空字符串了啊,这就是直接可以打印输出,我们先在代码里面测试一下。
02:09
运行。诶,这个没有任何问题啊,空一格A12B35C27啊这边大家会发现这种便利方式呢,这里边我们总用下划线element点下划线element点下划线这种方式看起来总是不太舒服,哎,总觉得有点奇奇怪怪的啊,特别是下划线在SKY里边应用非常的多,如果我们一一段代码里边到处都是下划线的话,很容易就看晕,哎,那能不能用更好更直观的方式把它定义出来呢?啊,这种方式我们就可以直接定义成元组点二我们可以将。List啊,元素直接定义为元组。
03:02
对,变量赋值,这说的是什么呢?我们在定义这个时候,绿色里边拿出来的本来就是元组嘛,那我们之前是把这个元组赋值给了这里的element这个变量,那现在呢,我既然已经知道它是原组了,我就直接干脆定义我要去。当前的这个循环变量啊,就是1Q就是一个元组,那要呃当前要去便利的这个元组,这不就是一个word一个count吗,直接对两个字段不已经。给它附一个变量值,所以接下来我们就不用下划线一下划线二了啊,这个我还得到原始的地方去找,看看它表示的到底是哪个字段,现在我们就告诉了,第一个叫做word,第二个叫做count,那接下来这个就非常方便了,从list里边拿出来下来直接做line打印,我们现在用的就是word,再加上空格,再加上啊。
04:08
看起来会非常的简洁了啊,就至少我们的代码可读性会更高啊,那当然了,这也不是唯一的啊,能能实现的这个功能,另外还可以进一步做其他的一些改变。我们还可以比方说,不考虑某个位置的变量。指电立K或者value啊,因为我们现在是二元组嘛,如果我们把它当成一个k value,对的话,那就相当于我可以只便利第一个位置上的K,或者只利所有的第二个位置上的value,哎,那这种方式要用for循环推导式写出来是什么样呢?比方说我们要遍历所有的T,那就是定义一个下,呃,定义一个word,我们考虑的是它或不考虑后边的value,哎,那就把后边也不用赋值,直接一个下划线的一个位就完事了,那当前我们访问就是所有list里边的二元组里边的word里边的这个value啊,那这里我们如果要是直接print line把每一个word打印的话。
05:25
下面我们还是稍微的做一个分割,看清楚一些。可以直接做一个打印,当然得到的就全是K了。ABC做一个输出。啊,那另外这里边我们在做匹配for循环的时候还可以,还有另外的做法是。2.4可以指定。某个位置的值必须是多少,那这是什么意思呢?如果我把它当成k value的话,可以直接要求K的时候,当前K必须是A,然后呢,后边是它的count啊,然后在这里边。
06:19
当前的这个list子里边去做一个查询,那自然我们就想到了里边当前有一个A对应的这个数,假如说我后边还有一个A对应了另外一个数呢,有没有这种可能呢?啊也是有可能的,那在这种情况下,我们的for循环就起到作用了,就会把找到的所有A对应的count都做一个打印输出,所以大家会发现这就相当于还帮我们做了筛选,有点像加了循环守卫一样的那种感觉。那现在我们直接打印输出,看看得到的是什么。我们看一个12,一个13,这全是。
07:04
K va对应的后边的这个值,一个12,一个13啊,这就是关于元组在模式匹配当中一些比较复杂,也是比较灵活的应用。使大家如果要是能够自如的使用这些比较有趣的这些特性的话,我们的代码就会变得非常的灵活,而且可读性会更加强。
我来说两句