Swift语言有非常多函数式编程的特性。常见的map,reduce,filter都有,初看和python几乎相同,以下简介下

闭包介绍:

闭包是自包括的功能代码块,能够在代码中使用或者用来作为參数传值。

如果我们须要两个函数,当中一个计算两个数的平方的平均值,还有一个计算两个数的立方的平均值,传统的解决方法会是这样:

代码
func square(a:Float) -> Float { return a * a}func cube(a:Float) -> Float { return a * a * a}func averageSumOfSquares(a:Float,b:Float) -> Float { return (square(a) + square(b)) / 2.0}func averageSumOfCubes(a:Float,b:Float) -> Float { return (cube(a) + cube(b)) / 2.0}

我们注意到averageSumOfSquares和averageSumOfCubes的唯一不同仅仅是分别调用平方函数或立方函数。

如果我能够定义一个通用函数。这个函数以两个数和一个使用这两个数的函数作为參数,来计算平均值而不是反复调用将会非常好,我们能够使用闭包作为函数參数

代码
func averageOfFunction(a:Float,b:Float,f:(Float -> Float)) -> Float { return (f(a) + f(b)) / 2}averageOfFunction(3, 4, square)averageOfFunction(3, 4, cube)

在Swift中有非常多种定义闭包表达式的方法。这里从最啰嗦的開始展示到最简洁的为止:

代码
averageOfFunction(3, 4, {(x: Float) -> Float in return x * x})averageOfFunction(3, 4, {x in return x * x})averageOfFunction(3, 4, {x in x * x})averageOfFunction(3, 4, {$0 * $0})

Map

在Swift中Map是Array类的一个方法。我们能够使用它来对数组的每一个元素进行转换。
方法:func map(transform: (T) -> U) -> U[]
假如如今须要对一个Int数组进行字符串转换。那么就能够使用map方法:
let intArray = [1,111,1111]//结果为["1","11","111"]let stringArray = intArray.map({ (intValue) -> String in return "\(intValue)"})

Filter

filter用于选择数组元素中满足某种条件的元素。

方法:filter(includeElement: (T) -> Bool) -> T[]
还是接着上面Map的代码继续写:
//结果[111,1111]let filterArray = intArray.filter { (intValue) -> Bool in return intValue > 30}

Reduce

reduce方法把数组元素组合计算为一个值。
方法:reduce(initial: U, combine: (U, T) -> U) -> U
代码接着上面写:
//结果1223let sum = intArray.reduce(0,combine: +)let sum2 = intArray.reduce(0) { (int, int2) -> Int in return int+int2}


Swift高阶函数介绍(闭包、Map、Filter、Reduce)的更多相关文章

  1. 高阶函数概念以及map/filter/reduce

    什么样的函数叫高阶函数:map(func, *iterables) --> map object 条件:1.函数接受函数作为参数 2.函数的返回值中包含函数 num_l = [1,2,3,4,5 ...

  2. python 高阶函数学习, map、reduce

    一个函数可以接收另一个函数作为参数,这样的函数叫做高阶函数. 函数map(): map()函数接收两个参数,一个是函数,一个是Iterable, map把函数作用于序列的每一个元素,并把结果作为Ite ...

  3. 【Python学习之六】高阶函数1(map、reduce、filter、sorted)

    1.map map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回.示例: >>> def ...

  4. 【Python学习之六】高阶函数2(map、reduce、filter、sorted)

    3.filter filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素.相当于一 ...

  5. 【重温基础】JS中的常用高阶函数介绍

    Ps. 晚上加班到快十点,回来赶紧整理整理这篇文章,今天老大给我推荐了一篇文章,我从写技术博客中收获到了什么?- J_Knight_,感受也是很多,自己也需要慢慢养成记录博客的习惯,即使起步艰难,难以 ...

  6. 【Python】高阶函数介绍

    其实函数可以作为变量,之前学过C++,对于这种用法并不奇怪.无非就是函数充当变量,可以传入函数而已. 下面分别介绍 Python 中常见的高阶函数:map/reduce, filter, sorted ...

  7. Python学习札记(二十) 函数式编程1 介绍 高阶函数介绍

    参考: 函数式编程 高阶函数 Note A.函数式编程(Functional Programming)介绍 1.函数是Python内建支持的一种封装,我们通过一层一层的函数调用把复杂任务分解成简单的任 ...

  8. 07 (H5*) js课程第8天 高阶函数、闭包、沙箱

    目录: 1:call和apply方法调用 2:bind方法复制 3:函数中的几个属性值 4:高阶函数,函数作为参数 5:高阶函数,函数作为返回值. 6:   作用域链,作用域,预解析 7:闭包--延长 ...

  9. 函数高阶(函数,改变函数this指向,高阶函数,闭包,递归)

    一.函数的定义方式 1.函数声明方式 function  关键字(命名函数) 2.函数表达式(匿名函数) 3.new  Function( ) var  fn = new  Function(‘参数1 ...

随机推荐

  1. BZOJ4571 [Scoi2016]美味 【主席树】

    题目 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1≤i≤n).有 m 位顾客,第 i 位顾客的期 望值为 bi,而他的偏好值为 xi .因此,第 i 位顾客认为第 ...

  2. linux监控平台搭建-磁盘

    linux监控平台搭建-磁盘 磁盘:随着大数据快速发展.人工智能.自动化.云平台.数据量指数的增长.磁盘的使用量也在增长.目前的机器基本上采用SSD或者SATA盘,一直有人比较那个好.会不会使用时间短 ...

  3. 关于element-ui select组件change事件只要数据变化就会触发的解决办法

    使用select组件和表格组件结合起来用,但是发现在点击下一页的时候,由于select当中的数据发生了变化,所以也会触发select当中的change事件,但是我只希望在我主动改变select组件当中 ...

  4. vue当中设置全局变量的方法

    import fn from 'fn' Vue.prototype.fn = fn; 调用的时候 this.fn.way

  5. C语言第三题

    1.完成char *p,char *q 的字符串比较,相等返回1,错误返回-1 2.用户需要计算的2个20位数数字的加法,写程序实现让用户输入两个20位以上的数字并且相加,输出结果

  6. Linux 设备驱动的固件加载【转】

    转自:http://blog.csdn.net/zqixiao_09/article/details/51106663 版权声明:本文为博主原创文章,未经博主允许不得转载. 作为一个驱动作者, 你可能 ...

  7. Android 动态隐藏显示导航栏,状态栏

    Talk is cheap, show me the code. --Linus Torvalds Okay, here: 一.导航栏: [java] view plain copy private  ...

  8. vs-插件+配置

    { "window.zoomLevel": 0, "files.autoSave": "off", "editor.fontSiz ...

  9. vue v-on:click传递动态参数

    最近项目中要为一个循环列表动态传送当前点击列的数据,查了很久资料也没有一个完美的解决方案, 新手只能用vue的事件处理器与jquery的选择器做了一个不伦不类的方案,居然也能解决这个问题,作此记录留待 ...

  10. python学习之-- 生成唯一ID

    以下以2种方法生成唯一ID def uuid_method(): """第一种方法""" import uuid return str(uu ...