Swift 高階函數(shù)

1. 排序函數(shù)

func sorted(by areInIncreasingOrder: (Element, Element) throws -> Bool) rethrows -> [Element]

        var names: [String] = ["61","95","8","248","42"]
        //一個包含字符串的數(shù)組
        names = names.sorted(by: { (s1, s2) -> Bool in
            return s1 < s2
        })
        print(names) //輸出結(jié)果

該高階函數(shù)內(nèi)部大概實(shí)現(xiàn):

extension Array {
    
    typealias  IncreasingOrder = (String,String) -> Bool
    
    mutating func mySorted(_ increasingOrder:IncreasingOrder) -> [String] {
        var newString:[String] = [String]()

        // 假設(shè)這里采用簡單選擇排序
        for n in 0..<self.count{
            var tamper:String = self[n] as! String
            for i in n+1..<self.count {  //
                var next:String = self[i] as! String
                guard !increasingOrder(tamper,next) else {
                    continue
                }
                swap(&tamper, &next)
                swap(&self[n], &self[i])
            }
            newString.append(tamper)
        }
        return newString
    }
}
2. First函數(shù)

func first(where predicate: (Element) throws -> Bool) rethrows -> Element?

        let names:[String] = ["61","95","8","248","42"]
        //第一個滿足條件的值
        let name = names.first { (first) -> Bool in
            return first == "8"
            }!
        print(name) // 輸出: 8
3. Map函數(shù)

func map<T>(_ transform: (Element) throws -> T) rethrows -> [T]

        var names:[String] = ["61","95","8","248","42"]
        // 在每個字符前加上$
        names = names.map { (str) -> String in
            "$" + str
        }
        print(names) // ["$61", "$95", "$8", "$248", "$42"]
4. compactMap函數(shù)

flatMap 方法同 map 方法比較類似网持,只不過它返回后的數(shù)組中不存在 nil(自動把 nil 給剔除掉),同時它會把 Optional 解包

        let array = ["Apple", "Orange", "Grape", ""]
        
        let arr1 = array.map { a -> Int? in
            let length = a.count
            guard length > 0 else { return nil }
            return length
        }
        print("arr1:\(arr1)") // [Optional(5), Optional(6), Optional(5), nil]
        
        let arr2 = array.compactMap { a-> Int? in
            let length = a.count
            guard length > 0 else { return nil }
            return length
        }
        print("arr2:\(arr2)")// [5, 6, 5]
5. filter函數(shù)

篩選滿足條件的數(shù)據(jù)

        var names:[String] = ["61","95","8","248","42"]
        
        names = names.filter({ (str) -> Bool in
           return str.count > 1
        })
        print(names) // ["61", "95", "248", "42"]
6. reduce函數(shù)

計算, 可以對數(shù)組中的元素進(jìn)行計算

let array = [1, 2, 3, 4]
        //計算數(shù)組array元素的和
        //在這里$0和$1的意義不同姚淆,$0代表元素計算后的結(jié)果促绵,$1代表元素
        //0代表初始化值踱侣,在這里可以理解為 $0初始值 = 0
        let result = array.reduce(0){
            $0 + $1
        }
        print(result) // 10
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末斥废,一起剝皮案震驚了整個濱河市筒愚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌恢总,老刑警劉巖迎罗,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異片仿,居然都是意外死亡纹安,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钻蔑,“玉大人,你說我怎么就攤上這事奸鸯∵湫Γ” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵娄涩,是天一觀的道長窗怒。 經(jīng)常有香客問我,道長蓄拣,這世上最難降的妖魔是什么扬虚? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮球恤,結(jié)果婚禮上辜昵,老公的妹妹穿的比我還像新娘。我一直安慰自己咽斧,他們只是感情好堪置,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著张惹,像睡著了一般舀锨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宛逗,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天坎匿,我揣著相機(jī)與錄音,去河邊找鬼雷激。 笑死替蔬,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的屎暇。 我是一名探鬼主播进栽,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼恭垦!你這毒婦竟也來了快毛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤番挺,失蹤者是張志新(化名)和其女友劉穎唠帝,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體玄柏,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡襟衰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年佑力,在試婚紗的時候發(fā)現(xiàn)自己被綠了仲智。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖撕蔼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情介时,我是刑警寧澤报咳,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站玖详,受9級特大地震影響把介,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蟋座,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一拗踢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧向臀,春花似錦巢墅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至三娩,卻和暖如春庵芭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背雀监。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工双吆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人会前。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓好乐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瓦宜。 傳聞我的和親對象是個殘疾皇子蔚万,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

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