一分鐘代你理解并使用reduce

假如我們有一個數(shù)組女仰,對這個數(shù)組reduce的話蹂窖,請看下圖:


reduce

其中:
initial 表示reduce計算的初始值轧抗;
combine 是一個閉包,或者說是函數(shù)吧瞬测,別閉包閉包的横媚,聽著就有點怕怕。
那么月趟,我們看看這個函數(shù)灯蝴,他接收一個T,和一個Int孝宗。

打住穷躁,我們分析一下,TInt分別代表什么!
T很顯然是一個泛型因妇,回看一下我們的initial问潭,我們發(fā)現(xiàn)他也是T猿诸,因此,combine中的T狡忙,顯然就是上一步計算的值梳虽,我們也可以說是中間結(jié)果。那么灾茁,有好學(xué)的同學(xué)就要問了窜觉,第一次combineT是啥北专,很顯然他會和initial給定的相同咯禀挫。

combine

Int是什么,自然就是[1,2,3,4]中的各個element咯拓颓。

然后特咆,你就懂了。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
華麗的分割線后面一定有一段干貨录粱,讓我們看看腻格,下面這段代碼,他將字典[String:String]的元素中keyname的字段替換為Canada啥繁,將keycountry的字段設(shè)置為首字母大寫菜职,你看懂了沒~~

let bands: [[String: String]] = [
    ["name": "sunset rubdown", "country": "UK"],
    ["name": "women", "country": "Germany"],
    ["name": "a silver mt. zion", "country": "Spain"]
]

typealias BandProperty = String
typealias Band = [String: BandProperty]
typealias BandTransform = Band -> Band
typealias BandPropertyTransform = BandProperty -> BandProperty

let canada: BandPropertyTransform = { _ in return "Canada" }
let capitalize: BandPropertyTransform = { return $0.capitalizedString }

// 輔助函數(shù)
func call(fun: BandPropertyTransform, onValueForKey key: String) -> BandTransform {
    return {
        band in

        var newBand = band
        newBand[key] = fun(band[key]!)
        return newBand
    }
}

let setCanadaAsCountry: BandTransform = call(canada, onValueForKey: "country")
let capitalizeName: BandTransform = call(capitalize, onValueForKey: "name")

//注意,我們把這種方式稱之為管道旗闽,為什么這么說酬核,因為他實在是太形象了,可以看到适室,對bands中的每一個元素嫡意,使用functions中的function進行加工
//讓我們產(chǎn)生了無盡的遐想,是否 回憶起了 grep "hello world" | xargs ....  
// 一切都是那么的順其自然捣辆,啰嗦了蔬螟,因為我發(fā)現(xiàn)這個太有用了,所以情不自禁的寫了這么多注釋~~~
func formattedBands(bands: [Band], functions: [BandTransform]) -> [Band] {
    return bands.map {
        band in

        functions.reduce(band) { (currband, function) -> Band in
            return function(currband)
        }
    }
}

print(formattedBands(bands, functions: [setCanadaAsCountry, capitalizeName]))

那么汽畴,有比較好奇的同學(xué)旧巾,肯定會問,外面用map沒有問題忍些,但是鲁猩,里面你怎么就知道要用reduce,誒罢坝,問得太好了廓握,這個也是我在看之前的疑問,reduce可以保存中間狀態(tài)啊,可以將狀態(tài)帶到下一次運算啊隙券,相當(dāng)于管道的中間結(jié)果啊戈钢,輸送給下一個車間處理。

那么是尔,為什么不用map呢,那我們試試唄开仰,

發(fā)現(xiàn)寫不下去了

這里拟枚,是我們要使用function對band做轉(zhuǎn)換,我們要想到其可能的調(diào)用方式是function(band)众弓,如果牢牢扣住這點恩溅,你將會很自然的想到去使用reduce。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谓娃,一起剝皮案震驚了整個濱河市脚乡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌滨达,老刑警劉巖奶稠,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異捡遍,居然都是意外死亡锌订,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門画株,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辆飘,“玉大人,你說我怎么就攤上這事谓传◎谙睿” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵续挟,是天一觀的道長紧卒。 經(jīng)常有香客問我,道長诗祸,這世上最難降的妖魔是什么常侦? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮贬媒,結(jié)果婚禮上聋亡,老公的妹妹穿的比我還像新娘。我一直安慰自己际乘,他們只是感情好坡倔,可當(dāng)我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般罪塔。 火紅的嫁衣襯著肌膚如雪投蝉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天征堪,我揣著相機與錄音瘩缆,去河邊找鬼。 笑死佃蚜,一個胖子當(dāng)著我的面吹牛庸娱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谐算,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼熟尉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了洲脂?” 一聲冷哼從身側(cè)響起斤儿,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎恐锦,沒想到半個月后往果,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡一铅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年棚放,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片馅闽。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡飘蚯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出福也,到底是詐尸還是另有隱情局骤,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布暴凑,位于F島的核電站峦甩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏现喳。R本人自食惡果不足惜凯傲,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嗦篱。 院中可真熱鬧冰单,春花似錦、人聲如沸灸促。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至荒叼,卻和暖如春轿偎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背被廓。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工坏晦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嫁乘。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓昆婿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親亦渗。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 2018-Read-Record 記錄我的2018學(xué)習(xí)歷程 原文鏈接=http://appventure.me/2...
    NinthDay閱讀 9,557評論 5 36
  • 作者:Benedikt Terhechte汁尺,原文鏈接法精,原文日期:2015-11-30譯者:pmst;校對:Cee痴突;...
    梁杰_numbbbbb閱讀 1,131評論 0 1
  • 目的這篇教程從用戶的角度出發(fā)搂蜓,全面地介紹了Hadoop Map/Reduce框架的各個方面。先決條件請先確認(rèn)Had...
    SeanC52111閱讀 1,734評論 0 1
  • 小茹發(fā)來一個摳鼻的表情附加一句話:有點小打擊殉挽! “嗯哼?”一頭霧水的我回復(fù)到拓巧。 ...
    張三公子說閱讀 1,092評論 0 0
  • 史鐵生的《我與地壇》是我讀過最勵志的書籍斯碌,可能是他把自己看的太低微,表達的太真切肛度。他與自己的較量讓很多文字發(fā)了光傻唾,...
    大強書齋閱讀 190評論 0 0