Swift语法-高阶函数
2017-12-01 14:37
246 查看
高阶函数map,flatMap,reduce,filter可以简化代码量, 能用就用。
1、 map函数, 是集合和String类的实例方法, 作用是遍历时修改item;map并不会修改实例值, 而且新建一个拷贝。
摘自官方文档:
再举2个例子说明:
1、将Int数组转换为String数组, 即map支持转换数组参数类型;
2、偶数乘以10,测试遍历时添加自定义逻辑;
2、flatMap, 功能跟map类似; 区别是flatMap会过滤nil元素, 并解包Optional。
示例:
![](https://img-blog.csdn.net/20171201135018387?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYnJ5Y2VnYW8zMjE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
arr1包含5个值, arr4包含4个值。
flatMap还可以将多维数组转换为一维数组;
![](https://img-blog.csdn.net/20171201135316270?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYnJ5Y2VnYW8zMjE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
对于N维数组, map函数仍然返回N维数组。
![](https://img-blog.csdn.net/20171201140308212?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYnJ5Y2VnYW8zMjE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
PS: arr数组里包含3个元素, map循环了4次。
3、 filter函数, 顾名思义就是过滤出符合条件的元素。
![](https://img-blog.csdn.net/20171201140816973?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYnJ5Y2VnYW8zMjE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
4、reduce函数, 它可以使用2个参数即$0和$1, 而前3个函数只能使用一个参数$0。
reduce可以实现求和, 或筛选出符合条件记录计算总和。
![](https://img-blog.csdn.net/20171201142151576?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYnJ5Y2VnYW8zMjE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
高阶函数还可以链式使用(多级):
组合调用:
找出二维数组中所有的偶数。
如果使用基本二维数组遍历的语法就比较麻烦了:
//基本的二维数组遍历
var evenArr = [Int]()
for arr in array {
for item in arr {
if item % 2 == 0 {
evenArr.append(item)
}
}
}
print(evenArr)
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)
相关文章推荐
- ios -- 教你如何轻松学习Swift语法(二)
- Swift入门教程:基本语法(四)
- Swift基本语法
- ios -- 教你如何轻松学习Swift语法(三) 完结篇
- swift 初级语法
- swift 3.0基本数据语法
- 6.2 Swift闭包表达式的语法
- Swift学习笔记基础语法-字符串与字符
- Swift基础语法1
- Swift语法06.字符串
- Apple Swift 中文教程 快速参考 基本语法
- Swift语法之 ---- ?和!区别
- Swift2.1 语法指南——基本运算符
- Swift2.1 语法指南——属性
- Swift2.1 语法指南——继承
- Swift初窥----语法入门
- Swift2.1 语法指南——可空链式调用
- swift私人笔记本——基本语法介绍(2)
- swift学习2:基本语法
- swift学习二:基本的语法