map, flatMap分析

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]

原理分析

@inlinable public func map<T>(_ transform: (Element) throws -> T) rethrows -> [T]

去掉各种修饰,函数输入下:

public func map<T>(_ transform: (Element)  -> T) rethrows -> [T]

tranform 是一个映射闭包, 接受一个 序列的元素参数,返回一个 相同或者不用类型的元素。 map 的返回值是一个转换后的元素类型的数组。

flatMap(deprecated: 4.1, 使用 compactMap替换)

使用实例

let cast = ["Vivien", "Marlon", "Kim", "Karl"]
let lowercaseNames = cast.flatMap { $0.lowercased() }
print(lowercaseNames)// ["v", "i", "v", "i", "e", "n", "m", "a", "r", "l", "o", "n", "k", "i", "m", "k", "a", "r", "l"]

数组的元素是一个序列, flatMap进行了降维

let cast = [2, 3, 4, 5]
let lowercaseNames = cast.flatMap { $0 + 2}
print(lowercaseNames)//[4, 5, 6, 7]

数组的元素是数字,这里和使用map 的效果是一样的

源码解析

 public func flatMap<SegmentOfResult>(_ transform: (Element) throws -> SegmentOfResult) rethrows -> [SegmentOfResult.Element] 
/// In fact, `s.flatMap(transform)`  is equivalent to
/// `Array(s.map(transform).joined())`.

tranform 是一个闭包, 闭包对元素进行转换。
map 函数值对元素进行变换操作。 但不会对数组的结构造成影响。 而 flatMap 会影响数组的结构

compactMap

public func compactMap<ElementOfResult>(_ transform: (Element) throws -> ElementOfResult?) rethrows -> [ElementOfResult]

用法和flatmap一致

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值