Swift中Array高階函數(shù)的使用

前言

在Swift中,有關(guān)于Array的高階函數(shù)。這一點和JavaScript是一樣的。也就是說,Swift也是支持函數(shù)式編程的。

關(guān)于Array有以下幾個高階函數(shù):filter map reduce flatMap compactMap。其中前三個和JavaScript語言是一樣的,不同的是語法不同而已。下面我們就來探索一下這5個高階函數(shù)。掌握了這些高階函數(shù),可以讓我們對于一些關(guān)于數(shù)組處理更加得心應(yīng)手。

實踐

  • filter函數(shù):過濾,將數(shù)組中的元素按照一定的條件進(jìn)行過濾 返回過濾后新數(shù)組
    • 傳入函數(shù)/閉包表達(dá)式
    • 該函數(shù)/閉包表達(dá)式會執(zhí)行n次,n代表數(shù)組中元素個數(shù)
    • 該函數(shù)/閉包表達(dá)式 必須返回Bool類型
    • 該函數(shù)/閉包表達(dá)式 接收一個參數(shù),該參數(shù)就是每次遍歷的數(shù)組中元素
    • 如果函數(shù)/閉包表達(dá)式返回值是true 就把該元素放入新的數(shù)組
    • 如果函數(shù)/閉包表達(dá)式返回值是false 該元素就會被過濾掉
let array = [1, 2, 3, 4]
let newArray = array.filter { (n) -> Bool in
    return n % 2 == 0
}
print(newArray) // [2, 4]

// 利用Swift語言的語法糖 上面的代碼還可以進(jìn)行進(jìn)一步的簡化
let newArray = array.filter { $0 % 2 == 0 }
print(newArray) // [2, 4]
  • map函數(shù):將數(shù)組中元素進(jìn)行映射處理,返回處理過后的新數(shù)組
    • 傳入函數(shù)/閉包表達(dá)式
    • 該函數(shù)/閉包表達(dá)式會執(zhí)行n次,n代表數(shù)組中元素個數(shù)
    • 該函數(shù)/閉包表達(dá)式接收一個參數(shù),該參數(shù)就是每次遍歷的數(shù)組元素
    • 該函數(shù)/閉包表達(dá)式返回處理后的內(nèi)容,將處理后的內(nèi)容添加到新的數(shù)組中(映射操作)
let array = [1, 2, 3, 4]
let newArray = array.map { n in
    return n * 2
}
print(newArray) // [2, 4, 6, 8]

// 簡寫
let newArray = array.map { $0 * 2 }
print(newArray) // [2, 4, 6, 8]
  • reduce函數(shù):應(yīng)用場景:匯總或者數(shù)組中每個元素的值和前一個值有關(guān)聯(lián)的處理
    • 傳入初始值和一個函數(shù)/閉包表達(dá)式
    • 該函數(shù)/閉包表達(dá)式會執(zhí)行n次,n代表數(shù)組中元素個數(shù)
    • 該函數(shù)/閉包表達(dá)式接收2個參數(shù),上一次遍歷匯總的結(jié)果,和數(shù)組中的元素
    • 將匯總的結(jié)果作為返回值返回
let array = [1, 2, 3, 4]
let result = array.reduce(0) { (previousResult, n) in
    return previousResult + n
}
print(result) // 10

// 簡寫
let result = array.reduce(0) { $0 + $1 }
print(result) // 10
  • flatMap:和map對比著來理解
    • flatMap傳入的函數(shù)/閉包表達(dá)式 必須返回sequence類型
    • 最終的返回值將sequence中的元素放入到新的數(shù)組中
    • 而map傳入的函數(shù)/閉包表達(dá)式 直接將數(shù)組作為元素放入到新的數(shù)組中
let array = [1, 2, 3, 4]
let newArray = array.map { n in
    return Array(repeating: n, count: n)
}
print(newArray) // [[1], [2, 2], [3, 3, 3], [4, 4, 4, 4]]

let newArray2 = array.flatMap { n in
    return Array(repeating: n, count: n)
}
print(newArray2) // [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]

// 簡寫
let newArray = array.flatMap { Array(repeating: $0, count: $0) }
print(newArray) // [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
  • compactMap:和map對比著理解
    • compactMap在進(jìn)行元素映射的時候,會將nil過濾掉,并且會將可選項進(jìn)行解包
let array = ["1", "flutter", "3", "Vue"]

let newArray = array.map { item in
    return Int(item)
}
print(newArray) // [Optional(1), nil, Optional(3), nil]

let newArray2 = array.compactMap { item  in
    return Int(item)
}

print(newArray2) // [1, 3]

// 簡寫
let newArray = array.compactMap { Int($0) }
print(newArray) // [1, 3]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容