# swift Array map/flatMap/compactMap/filter/reduce/chaining用法小结

```import UIKit

let arr = [1,2,3]

//MARK:map(映射)：returns an Array containing results of applying a transform to each item.
arr.map { (value) -> Int in
return value * 2
}

arr.map { (value) -> Int in
value * 2
}

//闭包写在一行时，执行4次，第一次是闭包赋值操作
arr.map { (value) in value * 2}

let arr1 = arr.map {
\$0 * 2
}

arr.map {\$0 * 2}

let arr2 = arr.map {"\(\$0)"}
print(arr2)

let dic = ["point1" : 10, "point2" : 20, "point3" : 30]
dic.map { (name,distance) -> Int in//参数是元组
distance * 2
}
dic.map {\$0.1 * 2}

//MARK:filter：returns an Array containing only those items that match an include condition.
let arrF0 = arr.filter { (num) -> Bool in
num % 2 == 0
}

let arrF1 = arr.filter { \$0 % 2 == 0 }
print(arrF1)

//MARK:reduce（归纳）：初始值+闭包("+"操作符本质也是闭包)。returns a single value calculated by calling a combine closure for each item with an initial value.
let sum = arr.reduce(10) {Result,num -> Int in
Result + num
}
let sum1 = arr.reduce(10,+)

let dicR0 = dic.reduce("res:") { (Result, arg1) -> String in
let (key, value) = arg1
return Result + key + "\(value)" + ","
}

let dicR1 = dic.reduce("res:") { (Result, arg1) -> String in
let (key, value) = arg1
return key + "\(value)" + "!"
}

let arrStr = ["你", "好", "啊"]
let dicRStr0 = arrStr.reduce("归纳:"){res, str in res + str}
let dicRStr1 = arrStr.reduce("归纳:", +)

//MARK:flatMap（压平）:二维数组降维成一维；可选值转换为可选值
let arrWithArr = [[1, 2], [3, 4, 5], [6, 7]]
let arrFm = arrWithArr.flatMap{\$0}
print(arrFm)

let num: Int? = Int(8);
let numFM = num.flatMap{\$0 < 5 ? \$0 : nil}

//MARK:compactMap（紧凑）:去 nil+变非可选
let arrWithNil: [String?] = ["1", nil, "2", nil]

//'flatMap' is deprecated: Please use compactMap(_:) for the case where closure returns an optional value
//arrWithNil.flatMap{\$0}

let arrCm = arrWithNil.compactMap{\$0}
print(arrCm)

//MARK:chaining（链式语法）
let resCh = arrWithArr.flatMap{\$0}.filter{\$0 > 5}.reduce(10, +)
print(resCh)```

0 条评论

• ### 37.Swift学习之高阶函数

闭包是 Swift 中一个重要的知识点，不仅在开发中能够帮助解决很多问题（如逆向传值），而且在许多官方系统库方法中都能看到它的身影，尤其是在集合中提供了很多高阶...

• ### Swift编程小技巧

Swift中有很多有用的小技巧，用好了能使代码更加安全，简洁，易于理解或效率更加高效，在这记录一些编写swifty code的小技巧。

• ### Swift：map(), flatMap() 和 compactMap() 的区别

这将获取数组中的每个值并通过我们的闭包运行，其中\$0表示当前获取到的数字。因此，它将是1 * 2、2 * 2、3 * 2，依此类推 -map()将从其容器中取出...

• ### map compactMap flatMap

昨天说要输xpath语法，但是呢今天在公司被折腾了一天没有找到好的题材和做完好的技术储备，于是呢这会结合官方文档拿些小知识点来做个今天的总结……

• ### Swift| 基础语法（三）

总结下 swift下的基础语法，里面涉及到：常量&变量、Swift中的数据类型、逻辑分支、循环、字符串相关、数组和字典、方法的书写调用等内容，考虑到阅读体验分多...

• ### Hacking with iOS: SwiftUI Edition - 里程碑：项目 16 - 18

最近我们进行了一些非常漫长的项目，但这主要是由于您的SwiftUI技能真正得到了增长——您现在已经超出了基础知识，因此您能够解决更大的项目来解决更大的问题。我意...

• ### 通过Swift学函数式编程

在文章SWIFT IS A LOT LIKE SCALA [1] 提到Swift和Scala有很大的相似之处，在某些特性甚至比Scala对函数式编程的支持更友好...

iOS开发