码迷,mamicode.com
首页 > 编程语言 > 详细

Swift详解之五-----------map,filter,reduce

时间:2015-08-21 01:55:21      阅读:337      评论:0      收藏:0      [点我收藏+]

标签:swift   filter   map   reduce   

map,filter,reduce

注:本文为作者自己总结,过于基础的就不再赘述 ,都是亲自测试的结果。如有错误或者遗漏的地方,欢迎指正,一起学习。


关于Swift 中String 、数组 、字典的基本用法这里就不再赘述了,这些都很简单 不会的 在用得时候baidu下就行了。这里主要看下这几个高阶函数

map

map方法,其获取一个闭包表达式作为其唯一参数。 数组中的每一个元素调用一次该闭包函数,并返回该元素所映射的值(也可以是不同类型的值)。 具体的映射方式和返回值类型由闭包来指定。

当提供给数组闭包函数后,map方法将返回一个新的数组,数组中包含了与原数组一一对应的映射后的值。

来看看map的定义 `func map(transform: (T) -> U) -> U[]`  ,这里 `T`    和 `U` 都是泛型 ,指一种类型 , `T`    和 `U` 只两个不同的类型 ,也可以相同 。


来看个例子 :
我们用一个Int类型数组存储商品金额,想把每个金额前面添加一个字符“¥”
let prices = [10,20,30]
let strPrices = prices.map { "¥\($0)" }  
这个语法大家应该不陌生吧 ,陌生的去把上节闭包重新看一遍因为map只有一个参数,后面直接用了闭包的尾随 ,不会加括号了

得到的结果 :`print(strPrices)  //[¥10, ¥20, ¥30]` 

这只是一个简单的实例 ,其实你可以对每个元素进行很复杂的运算,这里不再赘述 ,用法如此,点到为止 、哈哈

filter

filter 顾名思义 就是用来过滤的 ,它使用来选择数组中满足条件的元素 
定义:filter(includeElement: (T) -> Bool) -> T[] 
接受一个数组元素 返回一个Bool类型 
let p = [10,20,33,44,87,15]
let res = p.filter{ $0>20 }
得到结果 :print(res) //[33, 44, 87]
是不是用起来很方便呀!!

reduce

reduce方法把数组元素组合计算为一个值,并且会接受一个初始值,这个初始值得类型可能和数组元素类型不同。来看定义 。
reduce(initial: U, combine: (U, T) -> U) -> U
不同的大写字母当成不同的类型看待。来看实例
let p1 = [20,20,10]
let sum = p1.reduce(0) { $0+$1 }
print(sum) //50
这个实例给了个初始为Int类型的 0 ,用这个  0 去加数组所有元素 
let sum2 = p1.reduce(4) { $0+$1 }
print(sum2) //54
初始值换成4 就会得到这样的结果 ,是不是也不是那么难理解呀!
let sum1 = p1.reduce("2") { " \($0) , \($1)" }
print(sum1) //  2 , 20 , 20 , 10
如果初始值是一个字串就不能用加法了。不过可以拼接得到上面的结果 。

map和filter都很好理解 ,reduce稍微难理解一点 

需要说明的是数据比较大的时候,高阶函数会比传统实现更快,因为它可以并行执行(如运行在多核上),除非真的需要更高定制版本的map,reduce和filter,否则可以一直使用它们以获得更快的执行速度


希望以上的实例可以帮助大家更好的理解这几个函数!

版权声明:本文为博主原创文章,未经博主允许不得转载。

Swift详解之五-----------map,filter,reduce

标签:swift   filter   map   reduce   

原文地址:http://blog.csdn.net/u010586842/article/details/47820205

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!