map & flatMap
map
map函数的定义:
1 | public func map<T>(_ transform: (Element) throws -> T) rethrows -> [T] |
这个是一个接受一个闭包参数,并且在闭包中返回一个集合元素类型
该函数返回的是一个当前调用集合所有元素经过处理后的集合
使用示例
可以直接使用
$0
来代表每个元素,并作为返回值.1
2
3
4
5let numbers = 1...3
let result = numbers.map {
$0
}
print(result) //输出:[1, 2, 3]作为闭包参数来返回,可以对每一个元素进行单独处理,并且在闭包内需要
return
,还需要特别的指定Int
这个泛型的具体类型1
2
3
4
5
6
7
8let result1 = numbers.map { (element) -> Int in
if element < 3 {
return element
}else{
return 10
}
}
print(result1) //输出:[1, 2, 10]
flatmap
flatmap函数定义
1 | extension SequenceType { |
与map类似的,同样是一个闭包参数,返回单个元素
最终返回的类型调用函数数组(可以在闭包中对单个元素进行重新添加)
使用示例
- 使用
$0
使用的数组let strs : [AnyObject?] = ["23" as AnyObject,"43rf" as AnyObject,nil,34 as AnyObject]
1
2
let flat2 = strs.flatMap{$0}
print(flat2) // [23, 43rf, 34]
使用闭包处理
1
2
3
4
5
6
7
8let test = strs.flatMap { (e) -> Int? in
return e as? Int
}
print(test) // [34]
let flat1 = strs.flatMap { (e) -> String? in
return e as? String
}
print(flat1) // ["23", "43rf"]
将多维数组合并到一个数组中
1
2
3
4
5let arr = [[1, 2, 3], [6, 5, 4]]
let brr = arr.flatMap {
$0
}
// brr = [1, 2, 3, 6, 5, 4]