乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Excel中的“聚合”函數(shù):REDUCE函數(shù)

       ExcelEasy 2022-01-26

      今天講講Excel中的新函數(shù):REDUCE函數(shù)。

      這個(gè)函數(shù)也是伴隨著LAMBDA函數(shù)使用的。

      我們前面介紹LAMBDA函數(shù)的時(shí)候說(shuō)過(guò),LAMBDA函數(shù)讓Excel本身構(gòu)成了一個(gè)“函數(shù)式語(yǔ)言”(參見(jiàn)這個(gè)新函數(shù),讓Excel進(jìn)入了一個(gè)新的境界)。

      在函數(shù)式語(yǔ)言中,MAP/REDUCE是非?!巴ㄓ谩钡暮瘮?shù),幾乎每種函數(shù)式編程語(yǔ)言都會(huì)實(shí)現(xiàn)這兩個(gè)函數(shù)。

      相對(duì)來(lái)說(shuō),從用戶理解的角度,REDUCE函數(shù)比著MAP函數(shù)稍顯復(fù)雜。

      所以,我們先舉一個(gè)非常簡(jiǎn)單的例子,來(lái)說(shuō)明一下REDUCE函數(shù)的用法吧。

      =REDUCE(0,A2:A5,LAMBDA(acc,v,acc+v))

      像MAP函數(shù)一樣,REDUCE函數(shù)的最后一個(gè)參數(shù)也是一個(gè)LAMBDA函數(shù)。這個(gè)函數(shù):

      LAMBDA(acc,v,acc+v)

      接收兩個(gè)參數(shù):

      acc

      v

      然后將這兩個(gè)參數(shù)加起來(lái)(acc+v)作為返回值。

      說(shuō)的這么熱鬧,就是求和而已??。

      (沒(méi)錯(cuò),我們就用一個(gè)簡(jiǎn)單的求和,這樣我們就可以集中精力關(guān)注REDUCE的邏輯了)。

      再看這個(gè)REDUCE公式的前面兩個(gè)參數(shù):

      0,

      A2:A5

      一個(gè)是常量0,一個(gè)是區(qū)域A2:A5

      它們顯然對(duì)應(yīng)于后面的LAMBDA函數(shù)的兩個(gè)參數(shù):

      acc,

      v

      因?yàn)锳2:A5是個(gè)數(shù)組,所以,REDUCE肯定是循環(huán)數(shù)組中的每個(gè)值,將每個(gè)值當(dāng)作lambda函數(shù)的參數(shù)v使用,分別跟acc求和。

      那么這個(gè)acc=0又是干什么用的呢?

      這是這個(gè)函數(shù)的稍微需要花點(diǎn)時(shí)間解釋的地方。

      我們來(lái)看一下這個(gè)函數(shù)的語(yǔ)法:

      其中的數(shù)組就是我們的A2:A5,函數(shù)就是最后一個(gè)參數(shù)LAMBDA,關(guān)鍵就是這個(gè):

      initial_value

      初始值?

      什么的初始值?

      原來(lái),REDUCE函數(shù)在內(nèi)部維護(hù)了一個(gè)東西,叫做“累加器”,英文叫做“accumulator“。

      而在第三個(gè)參數(shù)LAMBDA函數(shù)里,接收的第一個(gè)參數(shù)根本不是那個(gè)”0“,而是這個(gè)accumulator,只不過(guò),在這里,我們給這個(gè)accumulator一個(gè)初始值:0

      這個(gè)函數(shù)的工作方式是這樣的,

      簡(jiǎn)單說(shuō)明一下:

      因?yàn)閿?shù)組有四個(gè)元素,所以需要四步。

      第一步,計(jì)算數(shù)組中的第一個(gè)元素:1。

      accumulator采用初始值0,v的值就是數(shù)組的第一個(gè)元素:1,結(jié)果就是0+1=1。

      第二步,計(jì)算數(shù)組中的第二個(gè)元素:2。

      accumulator采用上一步的計(jì)算結(jié)果:1,v的值就是數(shù)組的第二個(gè)元素:2,結(jié)果就是1+2=3。

      第三步,計(jì)算數(shù)組中的第三個(gè)元素:3。

      accumulator采用上一步的計(jì)算結(jié)果:3,v的值就是數(shù)據(jù)的第三個(gè)元素:3,結(jié)果就是3+3=6。

      第四步,計(jì)算數(shù)組中的第四個(gè)元素:4。

      accumulator采用上一步的計(jì)算結(jié)果:6,v的值就是數(shù)據(jù)的第四個(gè)元素:4,結(jié)果就是6+4=10。

      計(jì)算完成!

      所以,REDUCE這個(gè)函數(shù)就是對(duì)第二個(gè)參數(shù)的數(shù)組做循環(huán),循環(huán)中的計(jì)算方法就是LAMBDA函數(shù)中使用的邏輯。

      注:大家不用被”累加器“這個(gè)名詞給帶偏了,LAMBDA的算法不僅僅限于加法,什么計(jì)算都是可以的。

      一個(gè)例子

      下面我們使用另外一個(gè)例子來(lái)說(shuō)明一下為什么要使用REDUCE函數(shù)。

      假設(shè)我們有下面的數(shù)據(jù):

      我們現(xiàn)在想計(jì)算一下其中的所有偶數(shù)的和,可以使用下面的公式:

      =REDUCE(0,A2:A11,LAMBDA(acc,v,IF(ISEVEN(v),acc+v,acc)))

      這個(gè)里面的邏輯就是LAMBDA函數(shù)了。

      其中就是判斷數(shù)組中的元素是否是偶數(shù),如果是,就加在合計(jì)里。

      這是結(jié)果:

      那么,為什么要使用REDUCE函數(shù)呢。

      首先,很多人可能會(huì)想,我可以采用數(shù)組公式呀,比如:

      {=SUM(IF(ISEVEN(A2:A11),A2:A11,0))}

      這是一個(gè)數(shù)組公式,需要CTRL+SHIFT+ENTER輸入。

      或者采用FILTER函數(shù):

      =SUM(FILTER(A2:A11,ISEVEN(A2:A11)))

      但是,遺憾的是,這兩種都不行。

      因?yàn)镮SEVEN函數(shù)也是不接受數(shù)組參數(shù)的。

      當(dāng)然,你可以改變個(gè)寫法:

      =SUM(FILTER(A2:A11,MOD(A2:A11,2)=0))

      這次結(jié)果對(duì)了

      我們總結(jié)一下:

      這里我們用了三個(gè)非REDUCE函數(shù)來(lái)嘗試做同樣的結(jié)果,其中,前面兩種都失敗了,而后一種結(jié)果是對(duì)的。

      而REDUCE和最后一個(gè)SUM(FILTER)相比有什么好處呢。

      簡(jiǎn)單來(lái)說(shuō),用FILTER的時(shí)候,因?yàn)椴荒苁褂肐SEVEN函數(shù),所以必須繞個(gè)彎,使用MOD函數(shù)判斷余數(shù)是否為0。

      而REDUCE函數(shù)就比較直接,邏輯清晰一些。

      實(shí)際上這是MAP/REDUCE函數(shù)的一種優(yōu)勢(shì),可以跟LAMBDA結(jié)合,處理數(shù)組,避免了很多函數(shù)不能處理數(shù)組的問(wèn)題。

      另外,REDUCE函數(shù)還有一個(gè)好處,就是函數(shù)的邏輯可以重復(fù)使用。

      如果我們通過(guò)名稱定義了自定義函數(shù):

      SUMEVEN=LAMBDA(acc,v,IF(ISEVEN(v),acc+v,acc))

      那么,上述的REDUCE函數(shù)就可以寫成:

      =REDUCE(0,A2:A11,SUMEVEN)

      在任何需要這個(gè)邏輯的地方都可以通過(guò)這個(gè)自定義函數(shù)使用這個(gè)邏輯。當(dāng)然,修改更加方便,只要在一個(gè)地方修改就可以了。

      當(dāng)然,這么做,還帶來(lái)了另外一個(gè)好處,那就是公式的可讀性更強(qiáng)了。

      那么,REDUCE又是什么意思呢?

      從名稱上看,這個(gè)REDUCE不是非常好理解。不過(guò)有人認(rèn)為這個(gè)函數(shù)是將一個(gè)數(shù)組或區(qū)域的值處理后變成了一個(gè)數(shù)值,所以才叫REDUCE。這么理解當(dāng)然有一定道理。

      在函數(shù)式編程語(yǔ)言中,REDUCE一般被看作“聚合”,英文是AGGREGATE,在Excel中專門有一個(gè)叫做AGGREGATE的函數(shù)。實(shí)際上,就是對(duì)一個(gè)數(shù)據(jù)庫(kù)或者數(shù)據(jù)列表進(jìn)行某種合計(jì)運(yùn)算,包括:

      求和

      求乘積

      求最大值(最小值)

      求平均值

      計(jì)數(shù)

      求方差(標(biāo)準(zhǔn)差)

      等等

      當(dāng)然,以上的計(jì)算在Excel中都有相應(yīng)的函數(shù)。但是有時(shí)有需要對(duì)原始數(shù)據(jù)進(jìn)行一番處理后,才能使用,這樣往往會(huì)帶來(lái)邏輯的復(fù)雜與多變。此時(shí),可以使用REDUCE函數(shù)來(lái)執(zhí)行這些計(jì)算。

      ·end·

        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多