00:00
打开我们幻灯片,我们来看一下折叠这个玩意儿,那么这个折叠是个什么东西呢?看清楚啊,Float函数将上一步返回的截值作为函数的第一个参数。啊,继续传递给参数运算,直到历史的所有元素被变历。那么呃,这个reduce left呀,可以看成是简化版的float left,也就是说我们left呢,更加的。强大。更加的强大,它的功能更强,那为什么呢?呃,我们,呃这有一段看这个reduce map的底层的代码,待会我们也还可以在源码上注意一下啊,大家看这里reduce left,如果我看底层代码,我们lawyer。我们看到它底层是这样写的。来看这里面,其实它就用到了这个float left。那这两个区别在什么地方呢?我们一会儿说啊,就是你看这个reduce left的,它跟这个折叠最大的区别是我们这个折向左折叠呢,它会首先有一个头。
01:08
OK,然后再传入。这个我们要进行折叠的,具体的这个函数,也就是说float内呢,它首先折叠嘛,大家想咱们折叠一般是一张纸折叠的时候,首先最先有一有有一个位置你才往里面折,不停的折嘛,所以它首先得有第一个元素,它先指定第一个元素,然后这些内容不停的往这边折,可能是把这个东西不停的累加到第一个参数,也可能是求一个最大值,所以说这个折叠呢,也取得名字特别的形象。特别形象,那么我们不说废话,我们自己看案例吧。好,同学们看,大家可以看到reduce left,就是调用float be behind,并且默认是从计划的,害啊是从这个,害啊是从集合。而写错了啊,是从集合的氦的元素开始操作的,那就他明确说往这个氦的元素开始进行这个操作,返回的始终是这个值,那么相关的函数有三种,Float float left和float right,它分别对应reduce的那种理解好,基本介绍我们就说完了,下面呢,我们来看两个案例,整点看一个案例啊,嗯,这还是用历史的集合来举例,仍然是求两个数的。
02:22
呃,相差的这么一个结果,那么看我的float left。跟它不一样的地方,这我先写了一个明确先指定的一个第一个元素,注意这个元素我这写的呢,是一个具体的数字,将来更多的用法是传入一个集合。就是说将来我们传的更多的可能是这样一个东西,同学们可能是一个buffer,或者是一个map,那就说我们可以把里面的东西不停的处理过后交给第一个参数,而且它底层还要实行递归。啊,这个效果就非常的好了,后面呢,我们会写相应的案例,大家再次提问好,那么这个地方同学们看到有个特点是,我这个float传了一个五,紧接着又传一个minus,这个叫什么现象呢?这叫函数的颗粒化。
03:08
颗粒化,函数的颗粒化呢,后面会详细的介绍,其实这个也没什么特别难的啊,函数的颗粒化其实就是一种形式,就是它可以把一个函数的多个参数呢分散开来传递。啊,就感觉更简洁,更简洁,后面我们再说这个函数可理化,那么这个地方我们来看这个结果是什么,好同学们,我就直接把这个代码拿过来,咱们运行一下。看结果再做分析,大家一下就知道折叠是干什么的了。好,打开我们这个idea,然后呢,我写一个名字叫做折叠。DEMO for demo01给他取一个名字叫做object,注意听讲啊。嗯,听讲的时候效率高的同学呢,将来你课下呢。这个就对吧。呃,这个玩耍的时间就比较多一点,对吧?好,我把这个代码稍稍的整理一下来看代码,同学们我们先做分析,再做速修,我说了啊,折叠的理解可以完全按照前面讲的化简的方式来理解,所以第一个大体的说明。
04:16
第一个折叠的理解。好,折叠。折叠的理解和reduce基本几乎是相同的化简,化简的这个运行机制运行。啊,运行机制几乎一样啊,几乎一样,就基本上百分都是一样的了,几乎一样。几乎一样。那么区别在哪里呢?我们看一下,那么我们先说这个步骤,它执行的步骤一,首先他这么干啊。这个如果float left,他指明确指定的一个五,就相当于这个代码。这个代码你可以你可以理解成啊,就相当于是理解成什么呢?理解成是这样一个东西,我简单写一下啊,有点类似于reduce。
05:07
Reduce left,然后这个里面传的仍然是,但是这个历史的呢,变成这个东西了。啊,这个list其实是有点等价于前面这个东西,拿过来在在最左边加了一个五。这么一个理解,就相当于说你这left lift先给这个集合增加了一个我指定的元素。啊,当然这个后面呢,可能更多的情况下是传的是一个又是一个集合啊,因为我们这一张做的比较简单,我就写了一个五。好,就相当于你这么去理解就对了,好,那现在具体来说就是这样子理解了啊。这个几个理解吧。好,下面步骤。步骤执行步骤来了啊,首先他先把五减四传给这个manner,那也就是说第一个步骤。
06:02
其实它是这样子的,是五减去一个五减去一个一。好,其他我就依此类推,那么五减一过后呢,他把这个结果放到,因为是左折叠,所以它作为第一个参数,然后呢,再减去后后面这个一,后面参数是二,作为第二个的结果。第二个结果过后呢,把这个结果拿到以后,然后再减去一个三。再见,皮克三包起来。哎,包起来,包起来过后呢,各位朋友继续往下,下一个步骤又把这个结果。传递给minus的第一个参数,然后再减去一个四,所以说最后这个结果大家可以算出来就应该是五减去一等于四,四减去二等于二,二减去一个三等于负一,负一减去一个,这个等于负六。好,呃这呃,这减四是吧,那应该等于多少来着,等于负五啊,刚才写错了,好,我们先预习一下这个结果对不对。
07:02
我们先用一下这个结果对不对,看一下啊,最后这个结果呢,它是等于负负五的正正确正确,那么这样子我们在调用这个minus的时候呢,仍然只调用了四次,不要说诶我多了一个参数是吧,我这是第一次,一次两次,三次四次结果就出来了,好,这个理解完了后呢,下面这个再理解,这个又折叠,那就特别好理解了啊,这个又折叠。一样的道理。理解这句话呢,有点类似于这样理解啊,理解这个right这个方式就有点类似于理解成这个,把这个五呢,人家就直接扔到了。右边哎,理解右边,所以说有点类似于这样一种这样一种使用,就是肉右折叠呢,它这个作为参数传到最后面,然后不停的向这个地方折叠,那这个理解的起来也很简单了啊,各位同学我就直接给大家来快速的走一下好。好不走,那首先呢是四减去五。
08:02
啊,四减五这个结果就拿到了。四减五这个结果拿到以后呢,把这个结果作为下这个第二个参数,参数是三减五啊,三减去这个结果包起来。三减这个包起来,然后呢,下面这个呢,就是二减去这个结果又成为一个新的结果,传入给minus的第二个参数,然后呢,这边是一减,它最后这个结果我们看一下啊,这个结果就应该等于四,四减五等于负一,三减负一等于四,二减去一个四等于负二,负二一减去一个负二等于正三和这个结果呢,应该等于三。最后这个结果等于三,我们来执行一下,一个是负五,一个是正三。执行。OK,当我们执行完毕过后,我们发现正确的好,那同学们关于这个折叠,我们就啊,这个就最基本的东西就说完了啊,其实就这么一点东西啊,就这么一点,但是呢,我刚才讲了一句话啊,将来我们更多的用法折叠的时候,这张传的不是一个具体的数,而是一个集合,因为这个集合它就可以把你折叠的整个这个结果呢,不停的累积或者是变换到最终的一个结果,后面我们会有案例。
09:19
会有案例啊,再多说一句,将来更多情况下,这个左折叠也好,右折叠也好,可能将来传的是一个什么呢?集合,也就是说这你这个玩意儿将来它的类型不一定跟你这个是一样的啊,就相当于折叠不一定折折折折折,最后这个返回这个结果给你拿回来了。只是我这传的是一个具体的数,所以感受不到这种应用的效果。好,同学们先把这一段给大家整理一下吧,啊,整理一下折叠啊,各位朋友,我们刚才讲的是折叠的基本介绍是不是?好,各位标,诶这个写错了啊,这是我们的这个标题二折叠来吧。好,感谢精神,那基本介绍呢,老师就相对来说快速的给大家走一下啊OK。
10:07
基本介绍给他板述一下,那刚才我们讲了什么呢?基本介绍给他说了一把,诶,然后这边我做了一点说明,这个是第一点吧,相当于对不对,当然所以说可以把reduce left当做这个来理解。啊,当做这个来理解没问题吧,好,然后呢,这有相关函数的理解呢,可以对照我们的reduce来做相关的理解,好这个说完以后呢,我也直接就上案例了,因为这些东西呢,都是在实际应用中,我们才能看出它的效果。好,直接呢,上了一个案例对不对,应用案例没毛病吧,然后再要写完了过后呢,我们把这个代码给同学们做了一个分析啊,代码录像。好,代码呢,就是刚才我们写的这一堆东西啊,也做了具体的分析的流程,好同学们,我把它呢给大家板书到咱们的笔记中去。
11:02
欧了欧了,好,这就是我们这一个折叠的基本介绍和使用。
我来说两句