Swift高阶函数map,filter,reduce实践
来源:互联网 发布:网络舆情队伍建设 编辑:程序博客网 时间:2024/06/14 20:57
Swift是一门面向协议的语言,在使用Swift时我们已经充分享受到了面向协议编程带给我们的便利,但是Swift相比Obj-C还有一个更重要的优点,那就是对函数式编程提供了很好的支持,其中Swift提供了map,filter,reduce这三个高阶函数(Higher Order function)作为对容器的支持。接下来我会介绍一下这三个函数的使用方法,算是对函数式编程的抛砖引玉,随后会使用这三个函数来优化一个计算文件夹大小的Demo。
map:转换,可以对数组中的元素格式进行转换
//将Int数组转换为String数组//$0代表数组的元素let array = [1, 2, 3, 4, 5 , 6, 7]let result = array.map{ String($0)}
filter:过滤,可以对数组中的元素按照某种规则进行过滤
//在array中过滤出偶数let result2 = array.filter{ $0 % 2 == 0}
reduce:计算 ,可以对数组中的元素进行计算
//计算数组array元素的和//在这里$0和$1的意义不同,$0代表元素计算后的结果,$1代表元素//10代表初始化值,在这里可以理解为 $0初始值 = 10let result3 = array.reduce(10){ $0 + $1}
这三个函数介绍完了,可以看到这三个方法使用起来非常的便利,接下来我会写一个计算文件夹大小的Demo
之前我已经在沙盒中创建了log文件夹,里边存放了四个文件,我们要做的是计算出log文件夹下.pdf格式的文件大小。
先写两个方法分别获取文件夹的路径和计算一个文件的大小
//获取文件夹路径func getFolderPath(folderName: String) -> String{ let path: NSString = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first! return path.stringByAppendingPathComponent(folderName)}//计算一个文件的大小func caculateFileSize(path: String) -> UInt64{ let fileManager = NSFileManager.defaultManager() let dic: NSDictionary = try! fileManager.attributesOfItemAtPath(path) let size = dic.fileSize() return size }
使用map,filter,reduce计算文件夹下.pdf格式文件大小
let folderPath = getFolderPath("log") let childFiles = NSFileManager.defaultManager().subpathsAtPath(folderPath) //使用filter过滤出.pdf格式的文件 //在map方法体中,将文件数组转换为size的数组 //使用reduce计算size数组的和 //最终返回reduce的计算结果 let result = childFiles?.filter{ ($0.componentsSeparatedByString(".")).last == "pdf" }.map({ (fileName) -> UInt64 in let filePath = folderPath + "/" + fileName return caculateFileSize(filePath) }) .reduce(0){ $0 + $1 } print(".pdf文件大小总和为----\(result)")
计算结果:
在代码中使用filter方法后直接调用了map方法,这是因为高阶函数支持链式调用,高阶函数的特性就是可以以一个函数或多个函数当参数,返回值也可以是一个函数,如果你使用过AutoLayout库 Masonry的话会很习惯这种写法。
以上仅代表我的个人观点,有不足的地方希望大家随时与我沟通
参考:
Swift 烧脑体操(三) - 高阶函数
Swift函数式编程实践
文/Lilin_Coder(简书作者)
原文链接:http://www.jianshu.com/p/32c009fcb13d
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
原文链接:http://www.jianshu.com/p/32c009fcb13d
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
0 0
- Swift高阶函数map,filter,reduce实践
- [Swift 开发] Swift高阶函数:Map,Filter,Reduce
- Swift高阶函数:Map,Filter,Reduce等-Part 1
- Swift高阶函数:Map,Filter,Reduce等-Part 1
- swift map filter reduce函数
- javaScript 高阶函数 map/reduce/filter
- 高阶函数:Filter、Map和Reduce
- 高阶函数:map、reduce、filter、sorted
- python 高阶函数 map/reduce/filter/
- Swift高阶函数介绍(闭包、Map、Filter、Reduce)
- Swift 函数Count,Filter,Map,Reduce
- python中的高阶函数map(),reduce(),filter()的区别
- Python高阶函数:filter、map、reduce、lambda
- Python学习2--高阶函数map、reduce、filter、sorted
- python 2.7 : 高阶函数map/reduce/filter/sorted
- Python 生成器及高阶函数 filter map reduce
- Python高阶函数——map/reduce/filter/sorted
- python学习 高阶函数/map()/reduce()/filter()/sorted()
- 写博客,从现在开始
- UI调试神器 for ios:Reveal的使用与破解
- jqGrid 学习笔记整理——进阶篇(二)
- js 声明变量
- WebViewJavascriptBridge详细使用
- Swift高阶函数map,filter,reduce实践
- 首试GPU并行运算
- 常用正则表达式
- MongoDB在Windows32bit(linux)下配置成自动开启的服务器注意事项
- Swift StateMachine源码分析
- 算法练习-实现memmove,及memmove与memmcpy区别
- swift:基于MPMoviePlayerController的视频播放器
- StudyJams-第02课_线性布局(LinearLayout)、相对布局(RelativeLayout)、填充(padding)、边距(margin)
- hbase 异常解决