Swift 提供了map、flatMap、compactMap、filer、reduce这几个高阶函数支持。

1,map : 可以对数组中的每一个元素做一次处理

// 计算字符串的长度
let stringArray = ["Objective-C", "Swift", "HTML", "CSS", "JavaScript"]
func stringCount(string: String) -> Int {return string.characters.count
}
stringArray.map(stringCount)stringArray.map({string -> Int inreturn string.characters.count
})// $0代表数组中的每一个元素
stringArray.map{return $0.characters.count
}

2,flatMap与map的区别

(1)flatMap返回后的数组中不存在nil, 同事它会把Optional解包

let array = ["Apple", "Orange", "Puple", ""]let arr1 = array.map { a -> Int? inlet length = a.characters.countguard length > 0 else { return nil }return length
}
arr1 // [{some 5}, {some 6}, {some 5}, nil]let arr2 = array.flatMap { a-> Int? inlet length = a.characters.countguard length > 0 else { return nil}return length
}
arr2 // [5, 6, 5]

(2)flatMap还能把多维数组变成一维数组:

let array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]let arr1 = array.map{ $0 }
arr1 // [[1, 2, 3], [4, 5, 6], [7, 8, 9]]let arr2 = array.flatMap{ $0 }
arr2 // [1, 2, 3, 4, 5, 6, 7, 8, 9]

(3)flatMap也能把两个不同的数组合并成一个数组,这个合并的数组元素个数是前面两个数组元素个数的乘积:

let fruits = ["Apple", "Orange", "Puple"]
let counts = [2, 3, 5]let array = counts.flatMap { count infruits.map ({ fruit inreturn fruit + "  \(count)"            })
}
array // ["Apple 2", "Orange 2", "Puple 2", "Apple 3", "Orange 3", "Puple 3", "Apple 5", "Orange 5", "Puple 5"]

4、compactMap: 当后面的闭包中返回Optional的时候,在Swift 4.1中应该使用compactMap代替map。

5、filer:过滤,可以对数组中的元素按照某种规则进行一次过滤:

// 筛选出字符串的长度小于10的字符串
let stringArray = ["Objective-C", "Swift", "HTML", "CSS", "JavaScript"]
func stringCountLess10(string: String) -> Bool {return string.characters.count < 10
}
stringArray.filter(stringCountLess10)stringArray.filter({string -> Bool inreturn string.characters.count < 10
})// $0表示数组中的每一个元素
stringArray.filter{return $0.characters.count < 10
}

6、reduce:计算,可以对数组的元素进行计算:

// 将数组中的每个字符串用‘、’拼接
let stringArray = ["Objective-C", "Swift", "HTML", "CSS", "JavaScript"]func appendString(string1: String, string2: String) -> String {return string1 == "" ? string2 : string1 + "、" + string2
}
// reduce方法中的第一个参数是初始值
stringArray.reduce("", appendString)stringArray.reduce("", {(string1, string2) -> String inreturn string1 == "" ? string2 : string1 + "、" + string2
})// $0表示计算后的结果, $1表示数组中的每一个元素
stringArray.reduce("", {return $0 == "" ? $1 : $0 + "、" + $1
})

Swift map、flatMap、compactMap、filer、reduce的使用总结相关推荐

  1. 在幕后看看Swift中的Map,Filter和Reduce的实现

    一个函数接受一些输入,对它做一些事情并创建一个输出.功能有签名和正文.如果为函数提供相同的输入,则始终获得相同的输出.简而言之,这是函数的定义. 现在我们将通过仔细研究它们来讨论更多功能.我们将在Sw ...

  2. Swfit Array 遍历 map flatMap filter reduce

    官网文档:Apple Developer Documentation 常用属性和方法可查看官网文档. 一.遍历 这里主要记录下遍历方法. 使用for in 遍历 for item in arr {pr ...

  3. 如何用Map、Filter和Reduce替换Python For循环?

    2020-01-06 17:00:00 全文共2375字,预计学习时长7分钟 图源:Unsplash 屏幕前的你,瞅瞅看,你的代码是不是通篇都是For循环?是不是眯眼靠近屏幕才能看清自己的代码? 没错 ...

  4. python进阶(小白也能看懂)——Map、Filter、Reduce

    python进阶(小白也能看懂)--Map.Filter.Reduce 第三篇 Map.Filter.Reduce是python中常用的函数,使用这些函数能够给我们带来很多便捷. Map map(fu ...

  5. map 长度_Python实用教程系列——高阶函数Map、Filter、Reduce

    点击上方蓝色文字关注我们吧 有你想要的精彩 作者 | 那个百分十先生出品 | Python知识学堂 上次推文我们介绍了python中的<Logging日志模块>的相关知识,这次推文我们将学 ...

  6. map for循环_如何用Map、Filter和Reduce替换Python For循环?

    全文共2375字,预计学习时长7分钟 图源:Unsplash 屏幕前的你,瞅瞅看,你的代码是不是通篇都是For循环?是不是眯眼靠近屏幕才能看清自己的代码? 没错,我就是这样的.(难以切齿) For循环 ...

  7. Python的map、filter、reduce函数

    Python的map.filter.reduce函数 map函数func作用于给定序列的每个元素,并用一个列表来提供返回值. map函数python实现代码: def map(func,seq):  ...

  8. python中 lambda, map ,filter ,reduce讲解

    lambda 是匿名函数 同来表达简单的函数 使用lambda函数应该注意的几点: lambda定义的是单行函数,如果需要复杂的函数,应该定义普通函数 lambda参数列表可以包含多个参数,如 lam ...

  9. [转载] Python---函数式编程(map()、filter()和reduce())总结

    参考链接: 带有示例的Python中的map(),filter()和reduce() (1)map()函数 map() 函数的基本语法格式为:map(function, iterable) 其中,fu ...

最新文章

  1. 年轻的LeCun、吴恩达长啥样?升级版StyleGAN告诉你
  2. micro850通讯协议msg_micro850通讯协议msg_半导体semi通讯的协议SECS/GEM
  3. 什么样的网站结构备受搜索引擎喜爱?
  4. 不会还有人不会配置LLDP链路层发现协议吧?
  5. python的shutil模块是内置的_Python之shutil模块11个常用函数详解,python内置函数是什么...
  6. mysql将备份的数据导入_成功将MySQL的大型数据导入导出和备份(转载)
  7. javascript --- 优先级执行顺序
  8. android 导航动画,安利一个Android导航库
  9. python网络爬虫爬取视频_Python网络爬虫——爬取小视频网站源视频!自己偷偷看哦!...
  10. java连接weblogic数据源_使用weblogic数据源大全
  11. 解决ADT无法在线更新
  12. [转载]firefox一鸣惊人 逼迫微软重新考虑IE战略
  13. matlab颜色选取与绘制?(附有颜色全表)
  14. cad2020打印样式放在哪个文件夹_CAD批量打印、DPF合成(建议收藏)
  15. linux 输入法成繁体字_寻找Ubuntu中繁体字输入法 | 学步园
  16. PM2.5的加重,和建筑工地关系大不大?(附扬尘治理方案)
  17. 初学者怎么快速学习3D建模?零基础必备建模知识,你都明白吗?
  18. 中兴手机数据通道打不开_中兴td-lte无线数据终端闪着绿灯 但是上不了网是怎么回事...
  19. 青春版网盘:不限度,10GB 空间
  20. Proximal Policy Optimization (PPO)

热门文章

  1. opencv2 加载RTSP视频流,内存溢出的问题
  2. 用python操作浏览器的三种方式
  3. Python视觉深度学习系列教程 第三卷 第9章 Kaggle竞赛:情绪识别
  4. websocket+cdn架构部署
  5. 2022年全球打鼾解决方案行业分析报告
  6. Java应用性能分析工具:async-profiler(配合FlameGraph生成火焰图)
  7. 启用群晖 Drive 的团队文件夹
  8. PS 逆时针绕圈文字
  9. TP5 在西部数码虚拟主机下 要如何实现伪静态
  10. Coursera的视频一直加载无法播放问题的完整解决【win10】