Why Coding like This 鳖链? —— Filter 函數(shù)揭秘

2.Filter函數(shù)揭秘

Topic 2:

請用Filter函數(shù)篩選出String數(shù)組中后綴是.swift的文件。

Example:

//例一:
var filesNeedToFilter = ["ViewController.swift","HelloWorld.c","Web.java","Person.swift","Main.c"]

//輸出["ViewController.swift","Person.swift"]
filesNeedToFilter.filter{
  file in
  file.hasSuffix(".swift")//注意suffix是后綴的意思
}

why coding like this?

命題:假設(shè)讓你寫一個(gè)函數(shù)來實(shí)現(xiàn)篩選后綴是.swift的文件,你該如何實(shí)現(xiàn)?
思路:首先聲明一個(gè)數(shù)組用于保存符合的結(jié)果值谢揪,然后遍歷需要篩選的數(shù)組扭弧,通過hasSufffix函數(shù)返回true or false來判斷數(shù)組元素是否含有指定的后綴阎姥。
代碼:

//例二:
func getSwiftFiles(files:[String])->[String]{
  var result:[String] = []
  for file in files{
    if file.hasSuffix(".swift"){
      result.append(file)
    }
  }
  return result
}
//不妨來試試//輸出["ViewController.swift","Person.swift"]
getSwiftFiles(filesNeedToFilter)

我們注意到只有滿足給定的篩選條件,這里是file.hasSuffix(".swift")返回true表示包含后綴鸽捻,反之不包含呼巴。
通過Map章節(jié)學(xué)習(xí)后泽腮,立馬意識(shí)到該函數(shù)的局限性—————僅適用篩選后綴是.swift的文件。因此我們需要自己指定篩選條件衣赶,而這個(gè)篩選條件是一個(gè)類型為String->Bool的閉包诊赊,String表示傳入需要條件判斷的元素,滿足返回true府瞄,不滿足返回false碧磅,這也是為什么閉包返回Bool的原因了。修改后的代碼如下:

//例三:
func getFilesByCondition(files:[String],f:String->Bool)->[String]{
  var result:[String] = []
  for file in files{
    if f(file){
      result.append(file)
    }
  }
  return result
}
//不妨來試試 采用closure的尾包形式
getFilesByCondition(filesNeedToFilter){
  file in
  file.hasSuffix(".c")//返回["HelloWorld.c", "Main.c"]
}

現(xiàn)在可以隨心所欲的傳入篩選條件了遵馆,但是該函數(shù)顯然仍有不足鲸郊,缺少什么呢?恩....對(duì)货邓!泛型秆撮,現(xiàn)在傳入的數(shù)組不能局
限于String類型,那么作為泛型我們就要使用T來泛指所有類型嘍(注意泛型并沒有特別指明要用T,U,你可以自由給定逻恐,建議使用大寫以及駝峰寫法)像吻。改寫代碼如下:

//例四:
func myFilter<T>(xs:[T],check:T->Bool)->[T]{
  var result:[T] = []
  for x in xs{
    //必須經(jīng)過條件判斷才可以
    if check(x){
      result.append(x)
    }
  }
  return result
}

看來又實(shí)現(xiàn)了一個(gè)自定義的方法,不妨試試好用不好用复隆。

why coding like this 系列拨匆,更多是用Why,How看待代碼,摒棄那種我只要會(huì)寫,至于為什么挽拂?因?yàn)槲乙恢蹦敲磳?/code>的思想惭每。希望對(duì)大家有幫助! 下文帶來reduce的揭秘亏栈。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末台腥,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子绒北,更是在濱河造成了極大的恐慌黎侈,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闷游,死亡現(xiàn)場離奇詭異峻汉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)脐往,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門休吠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人业簿,你說我怎么就攤上這事瘤礁。” “怎么了梅尤?”我有些...
    開封第一講書人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵柜思,是天一觀的道長岩调。 經(jīng)常有香客問我,道長赡盘,這世上最難降的妖魔是什么誊辉? 我笑而不...
    開封第一講書人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮亡脑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘邀跃。我一直安慰自己霉咨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開白布拍屑。 她就那樣靜靜地躺著途戒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪僵驰。 梳的紋絲不亂的頭發(fā)上喷斋,一...
    開封第一講書人閱讀 51,208評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音蒜茴,去河邊找鬼星爪。 笑死,一個(gè)胖子當(dāng)著我的面吹牛粉私,可吹牛的內(nèi)容都是我干的顽腾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼诺核,長吁一口氣:“原來是場噩夢啊……” “哼抄肖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起窖杀,我...
    開封第一講書人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤漓摩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后入客,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體管毙,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年痊项,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了锅风。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鞍泉,死狀恐怖皱埠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情咖驮,我是刑警寧澤边器,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布训枢,位于F島的核電站,受9級(jí)特大地震影響忘巧,放射性物質(zhì)發(fā)生泄漏恒界。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一砚嘴、第九天 我趴在偏房一處隱蔽的房頂上張望十酣。 院中可真熱鬧,春花似錦际长、人聲如沸耸采。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽虾宇。三九已至,卻和暖如春如绸,著一層夾襖步出監(jiān)牢的瞬間嘱朽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來泰國打工怔接, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留搪泳,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓扼脐,卻偏偏與公主長得像森书,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谎势,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

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