Swift语法-高阶函数
程序员文章站
2024-03-23 08:40:10
...
高阶函数map,flatMap,reduce,filter可以简化代码量, 能用就用。
1、 map函数, 是集合和String类的实例方法, 作用是遍历时修改item;map并不会修改实例值, 而且新建一个拷贝。
摘自官方文档:
let cast = ["Vivien", "Marlon", "Kim", "Karl"]
let lowercaseNames = cast.map { $0.lowercased() }
// 'lowercaseNames' == ["vivien", "marlon", "kim", "karl"]
let letterCounts = cast.map { $0.count }
// 'letterCounts' == [6, 6, 3, 4]
再举2个例子说明:
1、将Int数组转换为String数组, 即map支持转换数组参数类型;2、偶数乘以10,测试遍历时添加自定义逻辑;
let array = [1, 2, 3]
let str1 = array.map({ "$\($0)"}) //数组每个元素转成String类型
let str2 = array.map{ param -> Int in //遍历时可以添加条件判断逻辑
if param%2 == 0 {
return param * 10 //偶数乘以10
} else {
return param
}
}
print(array) //[1 2 3]
print(str1) //[“$1","$2","$3"]
print(str2) //[1,20,3]
2、flatMap, 功能跟map类似; 区别是flatMap会过滤nil元素, 并解包Optional。
示例:
arr1包含5个值, arr4包含4个值。
flatMap还可以将多维数组转换为一维数组;
对于N维数组, map函数仍然返回N维数组。
PS: arr数组里包含3个元素, map循环了4次。
3、 filter函数, 顾名思义就是过滤出符合条件的元素。
4、reduce函数, 它可以使用2个参数即$0和$1, 而前3个函数只能使用一个参数$0。
reduce可以实现求和, 或筛选出符合条件记录计算总和。
高阶函数还可以链式使用(多级):
let array = [1, 2, 3, 4, 5]
let sum0 = array.filter{ $0 > 2}.reduce(0, +)
print(sum0) //12
求数组里大于2的值之和。
组合调用:
找出二维数组中所有的偶数。
let array = [[1,2,3], [4,5,6], [7,8,9] ]
let even = array.flatMap {
$0.filter { $0%2 == 0}
}
print(even) //[2,4,6,8]
如果使用基本二维数组遍历的语法就比较麻烦了:
//基本的二维数组遍历
var evenArr = [Int]()
for arr in array {
for item in arr {
if item % 2 == 0 {
evenArr.append(item)
}
}
}
print(evenArr)
上一篇: 11.设计模式之中介者模式
下一篇: 用html和js制作一个控制灯泡开关效果
推荐阅读
-
Swift语法-高阶函数
-
C++11 中语法解析之虚函数与继承
-
用editplus编写好看的shell脚本 脚本editplus语法高亮函数列表shell
-
浅谈swift中类似于C++句柄的语法
-
Python函数:函数的定义语法、调用、参数类型(必选参数、缺省参数、可选参数、关键字可选参数)、return返回值、函数嵌套
-
Python进阶----高阶函数
-
【Swift4】(5) 函数基本使用 | 可变参数 | inout引用传递 | 函数类型返回值 | 函数嵌套
-
C#语法-虚方法详解 Virtual 虚函数
-
Java学习day041 lambda表达式(为什么引入lambda表达式、lambda表达式的语法、函数式接口、方法引用)
-
java8实战读书笔记:Lambda表达式语法与函数式编程接口