/*
使用了 map、 filter 和 reduce 的小实例。
假设我们有下面这样的结构体,其定义由城市的名字和人口 (单位为千居⺠) 组成:
*/
struct City {
let name: String
let population: Int
}
let paris = City(name: "Paris", population: 2241)
let madrid = City(name: "Madrid", population: 3165)
let amsterdam = City(name: "Amsterdam", population: 827)
let berlin = City(name: "Berlin", population: 3562)
let cities = [paris, madrid, amsterdam, berlin]
/*
假设我们现在想筛选出居⺠数量至少一百万的城市,并打印一份这些城市的名字及总人口数的列表。我们可以定义一个辅助函数来换算居⺠数量:
*/
extension City {
func cicyByScalingPopulation() -> City {
return City(name: name, population: population * 1000)
}
}
let cititesAllpop =
cities.filter { $0.population > 1000 }
.map { $0.cicyByScalingPopulation() }
.reduce("City: Population") { result, c in
return result + "\n" + "\(c.name): \(c.population)"
}
//过滤 -> 转换 -> 相加
/* 另外:
flatMap
很像map
函数,但是它摒弃了那些值为nil 的元素。另外一个与map
函数不同之处在于:倘若元素值不为nil情况下,flapMap
函数能够将可选类型(optional)转换为非可选类型(non-optionals)
*/
print(cititesAllpop)
//遍历 不操作 .forEach
/*
// =
City: Population
Paris: 2241000
Madrid: 3165000
Berlin: 3562000
我们首先将居⺠数量少于一百万的城市过滤掉。然后将剩下的结果通过 cityByScalingPopulation 函数进行 map 操作。最后,使用 reduce 函数来构建一个包含城市 名字和人口数量列表的 String。这里我们使用了 Swift 标准库中 Array 类型的 map、 lter 和 reduce 定义。于是,我们可以顺利地链式使用过滤和映射的结果。表达式 cities . lter (..) 的 结果是一个数组,对其调用 map;然后这个返回值调用 reduce 即可得到最终结果。
*/
函数式学习 - map、filter 和 reduce
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 1.函数式编程 1.1 高阶函数 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的...
- 对于绝大多数的程序员来说接触更多的是面向对象和面向过程的方式进行思考。实际上还存在一种更高效的思考方式函数式。也许...
- Python中有很多函数式编程的方法,本文介绍的是最常见的几个函数 注:本文基于python2.7。不同的版本可能...
- Swift函数式编程之Map&Reduce&Filter 什么是函数式编程呢?函数式编程其实是一种编程思想, 代码...
- 近日有网友晒出以前谢霆锋与儿子相聚的视频花絮,画面中,两个孩子一看到父亲便冲了上来,谢霆锋也张开怀抱拥抱孩子。谢霆...