Swift高阶函数 介绍

220 阅读1分钟

简介

Swift 中提供了丰富的高阶函数,用于数组、字典、集合等集合类型的操作。高阶函数是可以接受函数作为参数或返回一个函数的函数,常用于简化代码和增强可读性。主要有:map, filter, reduce, flatMap,compatMap,forEach,sorted, allSatisfy, first(where:),contains(where:),dropFirst/dropLast,prefix/suffix, zip

map

用于将集合中的每个元素通过闭包映射为一个新元素,并返回一个包含新元素的集合。

let numbers = [1, 2, 3, 4]
let squares = numbers.map { $0 * $0 }
print(squares)  // 输出 [1, 4, 9, 16]

compatMap

用于对集合中的每个元素 进行某种转换,并且会自动过滤掉结果中的 nil 值。返回新数组

let numbers = ["1", "2", "three", "4"]
let validNumbers = numbers.compactMap { Int($0) }
print(validNumbers)  // 输出 [1, 2, 4]

let arr = [1, 23, "three", "444"]
let res = arr.compactMap { $0 as? String }
// 输出 ["three", "444"]

flatMap

类似于 map,但会将嵌套的集合打平,避免出现多重数组。

let array = [[1, 2], [3, 4], [5]]
let flatArray = array.flatMap { $0 }
print(flatArray)  // 输出 [1, 2, 3, 4, 5]

filter

用于筛选出满足条件的元素,返回包含满足条件的元素的集合。

let numbers = [1, 2, 3, 4, 5]
let evenNumbers = numbers.filter { $0 % 2 == 0 }
print(evenNumbers)  // 输出 [2, 4]

reduce

用于将集合中的所有元素按照某种规则进行聚合,最终返回一个值。

let numbers = [1, 2, 3, 4, 5]
let sum = numbers.reduce(0) { $0 + $1 }
print(sum)  // 输出 15

其中,0 是初始值,0是累加器,0 是累加器,1 是当前元素。

forEach

遍历集合中的每个元素,但不同于 for-in 循环,它不能使用 break 或 continue。

let numbers = [1, 2, 3]
numbers.forEach { print($0) }
// 输出 1 2 3

sorted

用于对集合进行排序,可以根据自定义规则排序。

let numbers = [3, 1, 4, 1, 5]
let sortedNumbers = numbers.sorted { $0 < $1 }
print(sortedNumbers)  // 输出 [1, 1, 3, 4, 5]

first(where:)

返回第一个满足条件的元素,若没有则返回 nil

let numbers = [1, 2, 3, 4, 5]
let firstEven = numbers.first(where: { $0 == 5 })
 
print(firstEven)  // 输出 5

contains(where:)

用于判断集合中是否 有 元素满足条件,返回布尔值。

let numbers = [1, 3, 5, 7]
let containsEven = numbers.contains { $0 % 2 == 0 }
print(containsEven)  // 输出 false

allSatisfy

用于检查集合中的 所有 元素是否满足指定条件

let numbers = [2, 4, 6]
let allEven = numbers.allSatisfy { $0 % 2 == 0 }
print(allEven)  // 输出 true

dropFirst/dropLast

用于去除集合的第一个或最后一个元素,返回剩余部分。

let numbers = [1, 2, 3, 4, 5]
let withoutFirst = numbers.dropFirst()
print(withoutFirst)  // 输出 [2, 3, 4, 5]

prefix/suffix

用于获取集合的前几个或后几个元素。

zip