本來想寫一篇關于數組遍歷處理函數的總結的,寫著寫著發現還是得把這兩個函數單獨抽出了講上一講,我是直接跳進inject和reduce函數里面看的,發現這兩個函數注釋簡直就是復制粘貼,不說這么多,先上圖
這里面對兩個函數的用法已經講得很清楚了,我就不再解釋了,但是我們可以看到下圖,兩個函數的用法說明是一摸一樣的,但用法示例卻是不一樣的,難道區別就在這里嗎?
于是我就抱著一種求知探索的精神把這兩個函數都試了一遍,最終發現它們真的是一模一樣的,
先不說這么多,上圖自己看(雖然我還是不死心,但是時間緊迫,先試到這里)
感覺講到這里就沒什么好講了,不行,這樣子走掉很沒面子的,就再來扯下皮,嗯~,就說一下對inject和reduce函數的個人理解吧,基于上面證明兩者是一樣的,我就用inject來講解下(不要問我為什么用inject,因為我喜歡,個人比較懶,就直接用官方示例了)
剛剛寫到下面發現寫不下去了,所以先回來講一下inject的作用機理
enum.reduce(initial) { |memo, obj| block }
enum:數組
initial:為初始值賦值
memo:初始值
obj:遍歷數組里的具體對象
block:方法體
1.把initial的值賦給memo
2.memo和obj經過block的處理得出的值再次賦給memo
3.這時候memo的值已經更新,繼續與obj經過block的處理得出的值再次賦給memo
4.一直重復3步驟直到enum遍歷到最后一個對象
基本使用語法:
enum.inject(initial, sym)?
enum.inject(sym) ? ? ? ? ?
enum.inject(initial) { |memo, obj| block } ?
enum.inject{ |memo, obj| block } ?
enum.inject(initial)? do |memo, obj|
? ? ?block
end
好,搞定,收工,如果有什么問題可以在下面留言