温馨提示:本文最后更新于
2024-07-31 19:23:05
,某些文章具有时效性,若有错误或已失效,请在下方留言。运用五项原则,帮助实现函数式编程的优势。
- 函数是一等数据类型,可以像整数和字符串一样被创建、复制和传递。【一等数据类型】
- 函数是一等数据类型,所以它们可以用作其他函数的参数。【高阶函数】
- 为了使我们的函数能以各种方式重复使用,在给定特定输入时,函数应始终返回相同的输出,并且不会产生任何副作用。【纯函数】
- 由于函数在给定输入时总是返回相同的输出,因此我们应优先使用不可变的数据类型,而不是使用函数来改变可变变量。【不变性】
- 由于我们的函数不会产生副作用,而且变量都是不可变的,因此我们可以减少程序中的状态跟踪量,甚至可以完全消除状态跟踪。【还原状态】
map()
map()
方法从一个容器中取出一个值,对其应用一个函数,然后将该函数的结果放回一个新容器中,并返回给您。
func lengthOf(strings: [String]) -> [Int] {
return strings.map { $0.count }
}
实例
将字符串转换为大写字母
let fruits = ["Apple", "Cherry", "Orange", "Pineapple"]
let upperFruits = fruits.map { $0.uppercased() }
整数分数数组转换为格式化字符串
let scores = [100, 80, 85]
let formatted = scores.map { "Your score was \($0)" }
可选 map
var username: String? = fetchUsername(id: 1989)
let formattedUsername = username.map { "Welcome, \($0)!" } ?? "Unknown user"
print(formattedUsername)
forEach
forEach
是对数组进行循环,并在每个项上执行一个函数。map()
与 forEach
的主要区别:map()
返回一个新的数组项,而forEach()
则什么也不返回–它只是一种对每个项进行循环的功能性方法。
forEach()保证按顺序遍历数组元素,而map()则可以随意按顺序遍历。
["Taylor", "Paul", "Adele"].forEach { print($0) }
compactMap()
Swift 有一种特殊形式的map()
叫做compactMap()
,它会在map()
操作完成后执行压缩步骤:所有可选项都会被解包,任何包含 nil
的可选项都会被丢弃。
let albums: [String?] = ["Fearless", nil, "Speak Now", nil, "Red"]
let result = albums.map { $0 }
print(result)
打印内容
[Optional(“Fearless”), nil, Optional(“Speak Now”), nil, Optional(“Red”)]
let albums: [String?] = ["Fearless", nil, "Speak Now", nil, "Red"]
let result = albums.compactMap { $0 }
print(result)
打印内容
[“Fearless”, “Speak Now”, “Red”]
flatMap()
flatMap( )
方法是map()
方法的另一种变体,也是序列和可选项的变体。这两种变体的目标相同,线索就在名称中,都是扁平化map操作。
someArray.flatMap(transformFunction)
Array(someArray.map(transformFunction).joined())
filter()
filter()
方法会循环遍历集合中的每个条目,并将其传递到你编写的函数中。如果你编写的函数对该项目返回 true,它将被包含在一个新数组中,这就是filter() 的返回值。
let fibonacciNumbers = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
let evenFibonacci = fibonacciNumbers.filter { $0 % 2 == 0 }
实例
let names = ["Michael Jackson", "Taylor Swift", "Michael Caine", "Adele Adkins", "Michael Jordan"]
let result = names.filter { $0.hasPrefix("Michael") }
reduce()
reduce()
方法通过对每个项应用一个函数,将数组压缩成一个单一的值。每次调用函数时,都会从函数中传递上一个值以及数组中的下一个项。
let scores = [100, 90, 95]
let sum = scores.reduce(0, +)
© 版权声明
THE END
暂无评论内容