欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報激活碼778899分享:swift 開發(fā)語言 iOS

柚子快報激活碼778899分享:swift 開發(fā)語言 iOS

http://yzkb.51969.com/

iOS_Swift高階函數(shù)

#mermaid-svg-NxX1czIESDq47OQw {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-NxX1czIESDq47OQw .error-icon{fill:#552222;}#mermaid-svg-NxX1czIESDq47OQw .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-NxX1czIESDq47OQw .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-NxX1czIESDq47OQw .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-NxX1czIESDq47OQw .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-NxX1czIESDq47OQw .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-NxX1czIESDq47OQw .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-NxX1czIESDq47OQw .marker{fill:#333333;stroke:#333333;}#mermaid-svg-NxX1czIESDq47OQw .marker.cross{stroke:#333333;}#mermaid-svg-NxX1czIESDq47OQw svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-NxX1czIESDq47OQw .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-NxX1czIESDq47OQw .cluster-label text{fill:#333;}#mermaid-svg-NxX1czIESDq47OQw .cluster-label span{color:#333;}#mermaid-svg-NxX1czIESDq47OQw .label text,#mermaid-svg-NxX1czIESDq47OQw span{fill:#333;color:#333;}#mermaid-svg-NxX1czIESDq47OQw .node rect,#mermaid-svg-NxX1czIESDq47OQw .node circle,#mermaid-svg-NxX1czIESDq47OQw .node ellipse,#mermaid-svg-NxX1czIESDq47OQw .node polygon,#mermaid-svg-NxX1czIESDq47OQw .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-NxX1czIESDq47OQw .node .label{text-align:center;}#mermaid-svg-NxX1czIESDq47OQw .node.clickable{cursor:pointer;}#mermaid-svg-NxX1czIESDq47OQw .arrowheadPath{fill:#333333;}#mermaid-svg-NxX1czIESDq47OQw .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-NxX1czIESDq47OQw .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-NxX1czIESDq47OQw .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-NxX1czIESDq47OQw .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-NxX1czIESDq47OQw .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-NxX1czIESDq47OQw .cluster text{fill:#333;}#mermaid-svg-NxX1czIESDq47OQw .cluster span{color:#333;}#mermaid-svg-NxX1czIESDq47OQw div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-NxX1czIESDq47OQw :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

higher-order function in Swift

map 轉(zhuǎn)換

compactMap set/array取非空

compactMapValues dictionary取非空

flatMap 降維

filter 過濾

reduce 處理累積

1. 基礎(chǔ)知識

1.1 定義

高階函數(shù):higher-order function 如果一個函數(shù):

接受一個或多個函數(shù)當作參數(shù)把一個函數(shù)當作返回值 那么這個函數(shù)就被稱做高階函數(shù)。

例如:

let numbers = [1, 4, 2, 3]

let res = numbers.sort {

$0 < $1

}

看著不像是函數(shù)作為參數(shù),是因為 Swift 尾隨閉包 Trailing Closure 的特性。Swift 允許當函數(shù)的最后一個參數(shù)是閉包時,可以以緊跟 { } 的形式,將最后一個閉包的內(nèi)容附加在函數(shù)后面。

所以,以下兩行代碼是等價的:

// 正常寫法,函數(shù)是作為 sort 的參數(shù)

arr.sort({ $0 < $1 })

// Trailing Closure 寫法,更簡潔明了

arr.sort { $0 < $1 }

1.2 閉包語法

// 完整語法

nums.map({ (value: Int) -> Int in return value * 2 })

// 閉包語法

nums.map{ (value: Int) -> Int in return value * 2 }

// 省略返回值類型

nums.map{ (value: Int) in return value * 2 }

// 省略參數(shù)類型

nums.map{ value in return value * 2 }

// 省略 return

nums.map{ value in value * 2 }

// 省略參數(shù)

nums.map{ $0 * 2 }

2. 高階函數(shù)

2.1 map

2.1.1 集合類使用

遍歷集合處理后,組成新的集合

// 將數(shù)組中的字符串轉(zhuǎn)換為小寫字母

let cast = ["Vivien", "Marlon", "Kim", "Karl"]

let lowercaseNames = cast.map { $0.lowercased() }

print(lowercaseNames) // ["vivien", "marlon", "kim", "karl"]

// 獲得數(shù)組中字符串的長度

let letterCounts = cast.map { $0.count }

print(letterCounts) // [6, 6, 3, 4]

2.1.2 Optional使用

Optional 也可以使用 map:

let num: Int? = 2

var res = num.map { $0 * 2 }

print(res)

/// 而不需要像以下這樣解包

if let num = num {

res = num * 2

} else {

res = nil

}

2.1.3 map 時獲得 index

需要在 map 前使用 enumerated:

let indexRes = cast.enumerated().map{ (index, element) in

return "\(index):\(element)"

}

print(indexRes)

2.2 compactMap

Array 和 Set 使用 compactMap 可獲得非空集合:

let possibleNumbers = ["1", "2", "three", "http:///4///", "5"]

let mapped = possibleNumbers.map { Int($0) }

print(mapped) // [Optional(1), Optional(2), nil, nil, Optional(5)]

// compactMap 獲得非 optional 元素

let compactMapped = possibleNumbers.compactMap { Int($0) }

print(compactMapped) // [1, 2, 5]

Dictionary 得用 compactMapValues 如下。

2.3 compactMapValues

Dictionary 使用 compactMapValues 可獲得非空的鍵值對集合:

let dict = ["a": "1", "b": "three", "c": "http:///4///"]

let maped = dict.mapValues { Int($0) }

print(maped) // ["a": Optional(1), "b": nil, "c": nil]

let compactMaped = dict.compactMapValues { Int($0) }

print(compactMaped) // ["a": 1]

2.4 flatMap

flatMap 可將多維的集合,降低為一維:

let dict = ["Momo": [1, 2, 3], "Bibi": [4, 5, 6]]

let res1 = dict.map { $0.value }

print(res1) // [[4, 5, 6], [1, 2, 3]]

let res2 = dict.flatMap { $0.value }

print(res2) // [4, 5, 6, 1, 2, 3]

2.5 filter

filter 可過濾出符合條件的元素集合

// 過濾字符串長度小于5的

let cast = ["Vivien", "Marlon", "Kim", "Karl"]

let shortNames = cast.filter { $0.count < 5 }

print(shortNames) // ["Kim", "Karl"]

2.6 reduce

reduce 可對集合遍歷累積處理結(jié)果:

// 計算所有元素和

let numbers = [1, 2, 3, 4]

let res = numbers.reduce(0, { x, y in

// 第一個參數(shù)為上次處理結(jié)果

// 第二個參數(shù)為當前遍歷到的元素

x + y

})

print(res) // 10

3.練習

3.1 用 reduce 實現(xiàn) map

let arr = [1, 3, 2]

let res = arr.reduce([]) { (a: [Int], element: Int) -> [Int] in

var tmp = Array(a)

tmp.append(element * 2)

return tmp

}

// res = [2, 6, 4]

關(guān)鍵點:result 用數(shù)組

3.2 用 reduce 一次求出數(shù)組中奇數(shù)的和、以及偶數(shù)乘積

let arr = [1, 3, 2, 4]

let res: (Int, Int) = arr.reduce((0, 1)) { (a :(Int, Int), element: Int) -> (Int, Int) in

if element % 2 == 0 {

return (a.0, a.1 * element)

} else {

return (a.0 + element, a.1)

}

}

// res = (4, 8)

關(guān)鍵點:result 用元組表示

3.3 使用高階函數(shù)求一個數(shù)組中偶數(shù)的平方和

let arr = [1, 3, 2, 4]

let res = arr.filter {

$0 % 2 == 0

}.map {

$0 * $0

}.reduce(0) {

$0 + $1

}

Reference: Apple Documentation for swift Swift 燒腦體操(三) - 高階函數(shù) 深入淺出Swift高階函數(shù)-Map、Filter、Reduce swift小知識點之高階函數(shù)之map, filter, reduce

柚子快報激活碼778899分享:swift 開發(fā)語言 iOS

http://yzkb.51969.com/

相關(guān)文章

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/17815676.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄