00:00
我一步一步的写,大家还记不记得我们在讲这个数据结构的时候,我们讲到有一个应用练习在哪里呢?就这个不是这儿,不是这儿,诶好像是在这儿,我们当时讲了这么一个题,我们来一起把它评讲一下,来走一段代码。这个题大家认真听啊,这个题大家一定要认真听,这个呢,我们叫word count吧,认真听呀。Board can't,认真听。好,这个word count呢,大家回忆一下当时这个题的要求是什么?来,各位。先看看这个要求一步一步的来啊,他说啊,他说给了你一个历史的集合干什么?使用映射集合这个使用映射这个集合历史中,历史中的各个单词出现的次数。
01:01
并且按照出现次数排序,这个排序呢,呃,他没有说是,呃,从小到大还是从大到小,这个无所谓,我们呢,比如说是从从从小到大吧,从小到大,或者从大到小吧,从大到小。我们一步一步来玩啊,这个还是有点难度的,各位同学你拖插拔一下,自己来写,你还不一定写得出来呢。那么同学们,你们原先学这个map reduce的时候,你们也说了,自己大概写了二三十行代码,对吧?那二三十行代码我们看看,如果用我们的这一个scanner会用几句话来写啊,我们看看,看看anner可以怎样完成,来这个地方呢?大家一定认真听我一步步写,把这个把这个,保证你们都能都能听懂。保证你能听懂,这个还不是那么好讲,因为我我原先在讲,怎么能让大家听懂呢,还得一步一步走,然后把它组装在一起,好,我们来看第一步步骤一待会再组合啊,先分先分步再组合,先分步完成再组合再。
02:12
组合在一起。再组合好步骤一,我们是不是第一步先要把各个单词拆解出来,这是第一步,好,各位同学,Nice。Nice,诶,我我这是不是注释的啊,这个就。好,拿到这儿吧,我们一步一步来,先拆解。Les点先扁平化Fla map那么扁平化,我问同学们,此时此刻这里面传进去的是什么?就是这个历史的map,它里面传进去是不是就是字符串,是不是这样子写很好理解,就是S10寸,我为什么要给把这个原原生的这个函数写出来,就是让大家好理解,看清楚了啊s.split。
03:00
各位,是不是这个就拆解出来了?那么我问同学们一个问题,此时此刻你们感觉到这个地方返回的应该是个什么?是不是就单个单个的字,单个单个的单词了?是不是单个单单词来走一个?那RESULT1等于加上我们一好执行一下,第一步已经完成了啊,拆解的工作已经完成了。拆解工作已经完成了,好看到拆解,但是这种写法呢,很很low,所以说我们要用他的简写,我把这个留在这啊,就让因为有些同学呢,他这个不一定能能把这个最简,简化的形式虽然很简单,但是你看不懂,所以说我一步一步过来,那么简化的形式其实是可以这样写的,我把原生的形式写到那这个就去掉了,直接一个下划线搞定。是不是一样的道理,好一步一步来啊步着急,好我们看到这个结果呢,跟我们想的完全是一样的,好各位步骤二步骤二,那么步骤二我要干什么呢?是不是我要把它组成,组成一个个的对偶进行统计,好步骤二我要把它形成一个对偶,我要这样子,我要形成。
04:15
我要做成一个对偶,对偶list,那么为什么要做成对偶list呢?因为这样我才能进行下一步的统计,才能统计,才能这个分组并统计。好。这个呢,有也也不难啊统计,那么我们还是按照刚才那个步骤来RESULT1。注意一点干什么呢?Map map,我的map大家看是不是它第一个传的是字符串啊,第二个返回一个这个结果,这个结果你爱返回什么,是不是他也没有没有规定好这样子的话呢,我们就这样写了,你实际上传了一个字符串进来。好,然后呢,我要把它组合成什么呢?S1,看到没有好这个地方,我们来看这个玩意儿Val result2来了,好,同学们看我们这个时候返回的是什么呢?
05:15
这个就very easy了啊,RESULT2等于我们的RESULT2注意,好,同学们看代码,现在呢,我们得到这个结果就是单个单个的队友了拿到了,因为这样我才能统计吗?好,不着急,这个呢又可以进行简化,上面这个能简化成什么形式,各位是不是其实就是变成这个德行了,把这个去掉,直接写成这个了,现在能看懂了吗?你要这个再看不懂我也明白了,我都已经把原始的和,所以说你们以后再学这个map的时候呢,如果你想不起来怎么写,你先把原生的写出来。好,这样你再执行,仍然是的,仍然是OK的,好,你看这个地方然是OK,下一步又来了步骤三。
06:03
步骤三呢,这个地方呢,可能以前老师没讲过,这叫分组,这个分组呢,大家第一次用啊叫分组,我要分组干什么呢?就是把把这个不同的不同的这个单词,单词归属到归属到不同的这个组中,那这个呢,以前没有讲过,所以这些东西呢,以前没有说过,我写一下啊,以前没有说过。没有说过。没有说过,但是你们将来工作中有很多,或者不是说很多啊,至少从那个语法层面的。可能没有讲过的,但是原理咱们就讲过了没有,没有说明的呢,你就跟着老师走呗,result2.groupby不要着急,这个时候呢,你看老师的先发,你看首先看这个提示,这个提示其实特别的重要。你先把原生的写出来,我问大家第一个S是不是就是你那个对偶里面的那个S,这个印的是对偶里面的第二个值是不是,你要怎么办?其实特别简单,你要这样写X。
07:06
这个地方是我们的行参,先把行参给我搞出来,不然你待会很难反应过来,这个行参是它里面第一个是寸,第二个是in特,能看懂了吗?然后我要按照它的第几个轴,是不是要按照它的这个第一个元素来进行分组,所以说你这应该是X第二_一能看懂了吧,现在。就说我现在每个遍历出来的是一个一个的队友元组,我要按照队友元组里面的第一个元素进行分组,看懂了吗?好,这个时候代码又O了。Re,绕三现在离我们越来越近了啊,各位同学,现在我们写个re,绕三,虽然这个地方我花了点时间,但是我觉得这个时间是花的值得的啊。走,我们再一看,诶,效果又进了一步,大家看这里是不是含里面有list的,两个list的D又对应一个list里面有一个C,有一个U,艾特硅谷有两个,看清楚没有,好又出来了,但是这个呢,也可以简化。
08:11
可以讲话是什么形式,找个同学说一下。你们说一下,能讲完成什么德行呢?是不是直接前面全部干掉,就留一个这个东西。你能看懂吗?如果说前面没有这个过程,我估计好多同学是看不懂的,至少我看不懂啊,至少这个东西你要转转脑筋的,你用熟了就没问题,但你第一次是真的很难看懂。这个说实话确实确实有点有点那个什么啊,太简洁了,那么再执行呢,我们发现OK,下一步你知道我干什么吗?是不是我要再形成一个队友,把这个提出来,再把它进行一个赛制就可以了,是不是好又来了啊,各位同学,我们第四一步。对对,各个上面的上面的各个元组。
09:01
元组进行这个统计大小,那么同学们来走吧,RESULT3点,我们是不是还可以进行这个map呀,还可以进行map,好,这个就有点麻烦了,大家看这个能看懂吗?这个地方你要看它的类型是不是还是圆组。他的第一个是十寸,第二个是list的,List里面是不是又是圆组,要把这个类型写完啊,不然待会你不好写,那么首先打个小小括号,不要忘了。很多同学写的时候,写原生的时候,他不写小括号,整个就完全错了,轴括号起来第一个是十是不是十寸,第二个是不是list的,List的里面,List的里面是不是有泛型。泛型里面是不是又是一个队友元组?我知道啊,不需要变量了,然后这个地方这个地方走。看出来没有,然后你要做的事情是返回一个什么结果,是不是要返回一个新的队友,是X,他是一个队偶吧,X是个队友点。
10:09
一然后它的第二个值是什么?是不是X里面的这个X点。2.size不不是认子那个我们这个list是不是size来统计的,好像好这样子写完了,来同学们看结果来了啊,我觉得这个这样子大家理解起来应该还算是OK。你看啊RS你就知道是怎么来的了,Result是,诶道是在哪去了,哦,我没写啊,没写,不好意思来VR result是整一个好,各位朋友,我们把它扔在这一直行,请看效果。OK,你看这个结果就已经跃然纸上了,还有两个第有两个爱的硅谷,有两个哈,有两个,但是这结果已经出来了,结果出来过后,我们这个是不是可以简写啊,是不是可以简写,你看什么可以简写,你看一下是不是这个X是它只有一个呀,他只有一个,是不是这一大坨就已经可以扔掉了。
11:13
这个能看出来吗?类型可以扔掉了。是可以扔掉吧,就可以了,哪个可以去掉这个不能,这个地方再出现两个X,你能去掉吗?不能号哦,他说原工可以去掉,这这哥们到时说是对的啊,但是你这个能不能去掉,各位有些同说老师我还可以去掉,你去个试试看,说老师我我狠一点这个把这个去掉,然后这边又去下划线,这个就不行呢,这个为什么不行呢?因为你出现了两次,我我说过出现一次可以用下划线,出现两次我说过可不可以啊,没不行吧,说你这个应该写成这个德行了啊。也就是说,你现在就变成这个样子了,你能看懂吗?好,这个地方你再来执行,它仍然是OK的,现在离我们的目标越来越近了,越来越近了,好,这个map已经出来,现在呢,我们要进行一个排序,是不是要进行排序第五步步骤五排序,那么同学们排序这玩意儿啊,就是我们要看他有没有方法,我们肯定不能自已去排,那么首先我们找这个re result4,这个RESULT4,你们看类型是不是是一个map,那么你个map里面好像是没有sort的,我反正我没有看到,没有sort,我们是不是讲过map和list可以相互转换,那就转成一个to list to list完后你看这有有没有sortt,没有,有sortt吧,Sortt我们根据什么排,是不是要根据它这个大小来排啊。
12:40
那么这个大小如果我们简单一点,这里面是不是又是元队友啊,这个一个map里面的,它的元素又是一个队友,所以说你要写全的话,应该是这样写走,然后第一个是时准。第二个是我们的int看懂没有,好,然后呢,这边来我们要找一个排序的根本排序根本是X里面的第二个元素,所以说你是X点。
13:06
第二个看到没有,那因为这个X出出现了一次,说说这地方我就直接简写了啊。上面上面这个可以直接把这个全部拿掉,直接写成他。看懂吗?是他然后呢,我们这个地方就得到了,我要的最后的这个结果拿到了,那么我们来,我们来执行一下这个玩意儿。我们来r result result5等于加一个RESULT5 OK,好,同学们,现在呢,我们就已经看到它默认应该是从小到大,我记得好像。你看这已经出来了啊,DEC依次U。啊,那如果说你要从大到小,因为我们要求是从大小reverse。Revers,这个呢,就是从大到小没问题,各位同学请看咱们执行的效果,没问题吧,当然说老师这个结果你要变成别的,你还可以变,我就不变了啊,这个A出现了三次,爱的硅谷出现了两次,还出现了两次,哈,出现了一次,以此类推,好,最后这个结果就OK了,我们走到这就写完了,OK了。
14:15
但是这样写呢,太啰嗦了,一步一步写充,不能充分发挥我们SC的这个优势,所以说下面呢,我们就合并。合并,我相信同学们应该没有任何问题了啊,合并合并其实就写成一坨就行了啊,来我们我们一起来这个合并,那这个就一一大堆啊,知道吧,就开始来了点,我我就不再写一次了,我就拿过来用,第一次我们先扁平化。是不是先扁平化,诶先扁平化,扁平化完了过后,它返回的是集合,它是集合的话呢,我可以进行第二步处理,就是这个map。这个是用来干什么的,是不是把它画成这个对偶啊,啊换成对偶,然后呢,继续对偶,完了过后呢,我们进行了一个分组,看到没有啊,进行了一个分组,分组完了过后呢,我们又进行了一个这样的操作,统计它的大小对不对,又把它写进去了。
15:13
这个完了过后呢,我们进行一个to list和反转。排序还反转了啊,整个写字。好,最后结果呢,就这样子的。来,我们执行一下,看看结果对不对。好,我们请合并的写法。这个我估计同学们第一次你是要慢慢来一下啊,就是习惯了就好了,合并合并合并我们执行一下,请看效果执行。OK,我们可以看到这个结果跟我们想的是完全一样的,完全一样的好同学们,那么关于这个题我们就说到这,同学们以后呢,就是你看确实人家一句话就搞定你,人家说一句话就一句话,对吧,你们用了应该有30行代码是吧,人家一句话就搞定了,好的,这是这个的讲解写到这。
我来说两句