理解Swift中map 和 flatMap对集合的作用
来源:互联网 发布:数控车床编程g代码 编辑:程序博客网 时间:2024/05/17 11:34
map和flatMap是函数式编程中常见的概念,python等语言中都有。借助于 map和flapMap 函数能够很轻易地将数组转换成另外一个新数组。
map函数能够被数组调用,它接受一个闭包作为参数,作用于数组中的每个元素。闭包返回一个变换后的元素,接着将所有这些变换后的元素组成一个新的数组。
简单的说, map就是映射函数,把一个集合映射成另一个集合。
Swift的flatMap不容易理解,flatMap很像map函数,但是它摒弃了那些值为nil的元素。
flatMap
是在处理一个容器而不是数组,这样可以更好地理解它。
为了处理可选类型,flatMap被重载过。它会接受一个可选类型的数组并返回一个拆包过的且没有nil值的可选类型组成的数组。
下面是flatMap的定义
extension SequenceType { /// Return an `Array` containing concatenated results of mapping `transform` /// over `self`. func flatMap<S : SequenceType>(@noescape transform: (Self.Generator.Element) -> S) -> [S.Generator.Element]}extension SequenceType { /// Return an `Array` containing the non-nil results of mapping `transform` /// over `self`. func flatMap<T>(@noescape transform: (Self.Generator.Element) -> T?) -> [T]}
参考下面的示例代码:
let test1 = (1...7).map{ (i : Int) -> String? in return i > 1 ? String("sss \(i)") : nil}print(test1)let test2 = (1...7).flatMap{ (i : Int) -> String? in return i > 1 ? String("sss \(i)") : nil}print(test2)
执行结果
[nil, Optional("sss 2"), Optional("sss 3"), Optional("sss 4"), Optional("sss 5"), Optional("sss 6"), Optional("sss 7")]
["sss 2", "sss 3", "sss 4", "sss 5", "sss 6", "sss 7"]
参考文章
http://swift.gg/2015/08/06/swift-2-flatmap/
https://segmentfault.com/a/1190000004050907
0 0
- 理解Swift中map 和 flatMap对集合的作用
- java8中 map和flatmap的理解
- Swift 集合类型方法 map、 flatMap、filter
- spark中flatmap和map的区别
- Spark中map和flatmap的区别
- spark 中map 和flatmap 的区别
- Swift 数组中 Map,FlatMap,Filter,Reduce的使用
- Swift 数组中 Map,FlatMap,Filter,Reduce的使用
- Swift 函数式编程: map 和 flatMap的区别
- 谈谈 Swift 中的 map 和 flatMap
- 谈谈 Swift 中的 map 和 flatMap
- Swift FlatMap or Map
- swift - map() 与flatMap()
- map和flatmap的区别
- flatmap和map的区别
- spark中map和flatmap之间的区别
- 为swift编码引入map()和flatMap(), map those arrays
- Swift中的map 和 flatMap 原理及用法
- (七) CXF 整合Spring--发布WS服务
- JDBC常用类和接口
- 在 UITableView 上加手势(UITableView上点击键盘消失)
- 功能块网站推荐
- win7 Embedded EWF与HORM特性(实战验证)
- 理解Swift中map 和 flatMap对集合的作用
- 三角形面积
- (八) CXF 整合Spring--调用WS服务
- Email--Send
- C++第2次实验(函数题)
- hdu2157 how many ways 矩阵
- 做个“脸皮厚”的人
- JDBC常用类和接口及增删查修
- UIKit之UITableView的详细使用