Swift相比于Objective-C又一个重要的优点,它对函数式编程提供了很好的支持,Swift提供了map、filter、reduce这三个高阶函数作为对容器的支持。

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

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

2.flatMap

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还能把数组中存有数组的数组(二维数组、N维数组)一同打开变成一个新的数组

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"]
复制代码

3 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
}复制代码

4 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、filter、reduce的使用相关推荐

  1. Swfit Array 遍历 map flatMap filter reduce

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

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

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

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

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

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

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

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

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

  6. Python 进阶之路 (五) map, filter, reduce, zip 一网打尽

    简洁的内置函数 大家好,我又回来了,今天我想和大家分享的是Python非常重要的几个内置函数:map,filter,reduce, zip. 它们都是处理序列的便捷函数.这很大程度上归功于函数式编程的 ...

  7. js 数组遍历方法详解(map、filter、find、findIndex、reduce)

    目录 前言 map map是什么 map方法的结构及入参 语法糖 map一般不改变原数组 filter 说明 例子 find 和 findIndex 说明 例子 reduce 说明 例子 尾言 前言 ...

  8. 少侠留步! 你可能一直都误解了map,filter和reduce.

    少侠们好~ 今天和大家分享一篇关于JS数组里面的map,filter,reduce相关函数的知识, 相信少侠们肯定或多或少都了解过一些相关知识,特别对于map和filter这种很常用的函数的用法,可能 ...

  9. python函数+定义+调用+多返回值+匿名函数+lambda+高级函数(reduce、map、filter)

    python函数+定义+调用+多返回值+匿名函数+lambda+高级函数(reduce.map.filter) Python 中函数的应用非常广泛,比如 input() .print().range( ...

最新文章

  1. (六)Redis主从自动恢复-sentinel
  2. boost::container模块实现vector选项
  3. sso和oauth2.0的简单了解学习
  4. IOS开发之Storyboard应用
  5. 建议检察院服务器服务器配置 显示器,切换器 键鼠
  6. 关于redis启动流程介绍
  7. 中国火炬统计数据 2008-2021年
  8. svn里 is already locked
  9. html字幕精灵图标,视频加字幕精灵
  10. 诚之和:太平鸟难渡“抄袭劫”?
  11. 二进制堆的C++实现及其在机器调度(LPT)上的简单应用
  12. MATLAB三维画图函数使用总结
  13. java计算机毕业设计消防网站源代码+数据库+系统+lw文档
  14. 华为“美腿9”手机给我的惊艳!
  15. 解决网站加载图片太慢
  16. matlab中如何输入积分,在matlab中怎么输入特殊符号,Matlab的符号积分
  17. 基于ssm医药药品管理系统
  18. SpringMVC 程序开发
  19. 记一次粗浅的钓鱼样本分析过程
  20. Nonebot QQ机器人插件三:王者荣耀猜英雄游戏

热门文章

  1. linux存储--文件描述符fd与FILE结构体(二)
  2. i27岁转行java,JavaTM I/O 性能分析[转]
  3. 从事数据科学前必须知道的五件事儿
  4. zabbix_agent自动部署安装
  5. JMF介绍之媒体框架二
  6. mysql中pager命令妙用
  7. 看到他我一下子就悟了-- Lambda表达式
  8. iOS 学习记录----动画
  9. .net中实现拖拽控件
  10. 【HDU 5834】Magic boy Bi Luo with his excited tree