- 卷积神经网络学习笔记——ZFNet(Tensorflow实现)
- 24年3月使用VS22编译TelegramDesktop
- STM32中RFID模块(MFRC522)简单应用
- java反序列化-CC1
高阶函数是指接受其它函数作为参数,或者返回其它函数的函数。Swift 提供了许多内置的高阶函数,这些函数在处理集合类型数据(如数组、集合等)时尤其有用。常见的高阶函数包括 map、filter、reduce、flatMap 和 compactMap.
map
map 函数会对集合中的每个元素应用一个相同的操作,并将结果聚合成一个新的集合.
假设我们有一个包含整数的数组,并希望将每个整数乘以2.
let numbers = [1, 2, 3, 4, 5]
let doubled = numbers.map { $0 * 2 }
print(doubled) // 输出: [2, 4, 6, 8, 10]
filter
filter 函数会对集合中的每个元素进行条件判断,并返回符合条件的元素构成的新的集合.
我们有一个数组,需要过滤出所有的偶数.
let numbers = [1, 2, 3, 4, 5]
let evens = numbers.filter { $0 % 2 == 0 }
print(evens) // 输出: [2, 4]
reduce
reduce 函数会将集合中的元素组合成一个值,通过应用一个累计的操作。它需要一个初始值和一个合并操作.
我们有一个数组,需要计算所有元素的总和.
let numbers = [1, 2, 3, 4, 5]
let sum = numbers.reduce(0) { $0 + $1 }
print(sum) // 输出: 15
使用闭包语法可以简洁一点:
let sum = numbers.reduce(0, +)
print(sum) // 输出: 15
flatMap
flatMap 会对多维集合进行扁平化操作,并将子集合中每一个元素应用特定的操作,然后返回一个新的集合.
我们有一个由数组组成的数组,需要将其展平成一个单一的数组.
let arrayOfArrays = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
let flattened = arrayOfArrays.flatMap { $0 }
print(flattened) // 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]
compactMap
compactMap 与 map 相似,但它会移除所有结果中的 nil 值。通常用于处理返回 Optional 的操作.
我们有一个字符串数组,希望将其转换为整数,但其中有些值无法转换.
let strings = ["1", "2", "three", "4", "five"]
let numbers = strings.compactMap { Int($0) }
print(numbers) // 输出: [1, 2, 4]
除了 Swift 提供的这些高阶函数,你也可以根据需要定义自己的高阶函数.
我们定义一个高阶函数,该函数接受一个过滤条件并返回符合条件的数组:
func customFilter<T>(array: [T], condition: (T) -> Bool) -> [T] {
var result = [T]()
for element in array {
if condition(element) {
result.append(element)
}
}
return result
}
let numbers = [1, 2, 3, 4, 5]
let evens = customFilter(array: numbers) { $0 % 2 == 0 }
print(evens) // 输出: [2, 4]
除了已经介绍的 map、filter、reduce、flatMap 和 compactMap 之外,Swift 还提供了其他一些内置的高阶函数.
forEach
forEach 函数会对集合中的每一个元素执行指定的操作,但不会返回结果。它通常用作遍历集合的一个简洁替代.
let numbers = [1, 2, 3, 4, 5]
numbers.forEach { number in
print(number)
}
sorted
和 sort
sorted 函数会返回一个排序后的新数组,而 sort 方法则会原地排序数组.
let numbers = [5, 3, 1, 4, 2]
let sortedNumbers = numbers.sorted()
print(sortedNumbers) // 输出: [1, 2, 3, 4, 5]
使用自定义排序规则:
let sortedDescending = numbers.sorted { $0 > $1 }
print(sortedDescending) // 输出: [5, 4, 3, 2, 1]
原地排序:
var numbers = [5, 3, 1, 4, 2]
numbers.sort()
print(numbers) // 输出: [1, 2, 3, 4, 5]
contains
contains 函数用于检查集合中是否包含某个元素.
let numbers = [1, 2, 3, 4, 5]
let containsThree = numbers.contains(3)
print(containsThree) // 输出: true
或者使用自定义条件:
let hasEvenNumber = numbers.contains { $0 % 2 == 0 }
print(hasEvenNumber) // 输出: true
first(where:)
和 last(where:)
first(where:) 函数会返回满足条件的第一个元素,last(where:) 会返回满足条件的最后一个元素.
let numbers = [1, 2, 3, 4, 5]
if let firstEven = numbers.first(where: { $0 % 2 == 0 }) {
print(firstEven) // 输出: 2
}
if let lastEven = numbers.last(where: { $0 % 2 == 0 }) {
print(lastEven) // 输出: 4
}
allSatisfy
allSatisfy 函数会检查集合中的所有元素是否都满足指定的条件.
let numbers = [2, 4, 6, 8, 10]
let allEven = numbers.allSatisfy { $0 % 2 == 0 }
print(allEven) // 输出: true
dropFirst
和 dropLast
dropFirst 函数会移除集合的第一个元素,dropLast 函数则会移除集合的最后一个元素.
let numbers = [1, 2, 3, 4, 5]
let withoutFirst = numbers.dropFirst()
print(withoutFirst) // 输出: [2, 3, 4, 5]
let withoutLast = numbers.dropLast()
print(withoutLast) // 输出: [1, 2, 3, 4]
prefix
和 suffix
prefix 函数会返回集合的前几个元素,suffix 函数会返回集合的最后几个元素.
let numbers = [1, 2, 3, 4, 5]
let firstThree = numbers.prefix(3)
print(firstThree) // 输出: [1, 2, 3]
let lastTwo = numbers.suffix(2)
print(lastTwo) // 输出: [4, 5]
zip
zip 函数会合并两个集合,依次创建对应的元素对,形成一个新的序列.
let names = ["Alice", "Bob", "Charlie"]
let ages = [25, 30, 35]
let combined = zip(names, ages)
for (name, age) in combined {
print("\(name) is \(age) years old")
}
// 输出:
// Alice is 25 years old
// Bob is 30 years old
// Charlie is 35 years old
reduce(into:)
reduce(into:) 可以用来将集合的元素聚合成一个新集合,避免像 reduce 那样频繁地创建新值,从而提高性能.
let numbers = [1, 2, 3, 4, 5]
let doubled = numbers.reduce(into: [Int]()) { result, number in
result.append(number * 2)
}
print(doubled) // 输出: [2, 4, 6, 8, 10]
Swift 提供了丰富的内置高阶函数,这些函数极大地简化了对集合数据的处理,使代码更加简洁和功能性更强。通过灵活运用这些高阶函数,可以减少代码中的循环和条件判断,使代码更具可读性和维护性。了解并掌握这些高阶函数,可以帮助你编写更加简洁、高效和优雅的 Swift 代码.
最后此篇关于Swift开发基础08-高阶函数的文章就讲到这里了,如果你想了解更多关于Swift开发基础08-高阶函数的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
C语言sscanf()函数:从字符串中读取指定格式的数据 头文件: ?
最近,我有一个关于工作预评估的问题,即使查询了每个功能的工作原理,我也不知道如何解决。这是一个伪代码。 下面是一个名为foo()的函数,该函数将被传递一个值并返回一个值。如果将以下值传递给foo函数,
Abs 函数 返回数字的绝对值。 Abs(number) number 参数可以是任意有效的数值表达式。如果 number 包含 Null,则返回 Null;如果是未初始化变量,则返回 0。
Array 函数 返回包含数组的 Variant。 Array(arglist) arglist 参数是赋给包含在 Variant 中的数组元素的值的列表(用逗号分隔)。如果没有指定此参数,则
Asc 函数 返回与字符串的第一个字母对应的 ANSI 字符代码。 Asc(string) string 参数是任意有效的字符串表达式。如果 string 参数未包含字符,则将发生运行时错误。
Atn 函数 返回数值的反正切值。 Atn(number) number 参数可以是任意有效的数值表达式。 说明 Atn 函数计算直角三角形两个边的比值 (number) 并返回对应角的弧
CBool 函数 返回表达式,此表达式已转换为 Boolean 子类型的 Variant。 CBool(expression) expression 是任意有效的表达式。 说明 如果 ex
CByte 函数 返回表达式,此表达式已被转换为 Byte 子类型的 Variant。 CByte(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CCur 函数 返回表达式,此表达式已被转换为 Currency 子类型的 Variant。 CCur(expression) expression 参数是任意有效的表达式。 说明 通常,
CDate 函数 返回表达式,此表达式已被转换为 Date 子类型的 Variant。 CDate(date) date 参数是任意有效的日期表达式。 说明 IsDate 函数用于判断 d
CDbl 函数 返回表达式,此表达式已被转换为 Double 子类型的 Variant。 CDbl(expression) expression 参数是任意有效的表达式。 说明 通常,您可
Chr 函数 返回与指定的 ANSI 字符代码相对应的字符。 Chr(charcode) charcode 参数是可以标识字符的数字。 说明 从 0 到 31 的数字表示标准的不可打印的
CInt 函数 返回表达式,此表达式已被转换为 Integer 子类型的 Variant。 CInt(expression) expression 参数是任意有效的表达式。 说明 通常,可
CLng 函数 返回表达式,此表达式已被转换为 Long 子类型的 Variant。 CLng(expression) expression 参数是任意有效的表达式。 说明 通常,您可以使
Cos 函数 返回某个角的余弦值。 Cos(number) number 参数可以是任何将某个角表示为弧度的有效数值表达式。 说明 Cos 函数取某个角并返回直角三角形两边的比值。此比值是
CreateObject 函数 创建并返回对 Automation 对象的引用。 CreateObject(servername.typename [, location]) 参数 serv
CSng 函数 返回表达式,该表达式已被转换为 Single 子类型的 Variant。 CSng(expression) expression 参数是任意有效的表达式。 说明 通常,可
CStr 函数 返回表达式,该表达式已被转换为 String 子类型的 Variant。 CStr(expression) expression 参数是任意有效的表达式。 说明 通常,可以
Date 函数 返回当前系统日期。 Date 说明 下面的示例利用 Date 函数返回当前系统日期: Dim MyDateMyDate = Date '
DateAdd 函数 返回已添加指定时间间隔的日期。 DateAdd(interval, number, date) 参数 interval 必选项。字符串表达式,表示要添加的时间间隔。有
我是一名优秀的程序员,十分优秀!