Map vs Flatmap trong swift

–Các运算符chuyểnđổi数组​​trong swiftgồmcó:地图,平面图,归约。

  1. Flatmapsẽfilterloạibỏnil
  let strs:[String?] = [“ a”,nil,“ b”,nil,“ c”] 
令result = strs。 地图 {$ 0}
print(result)// a nil b nil c
  let strs:[String?] = [“ a”,nil,“ b”,nil,“ c”] 
令result = strs。 flatMap {$ 0}
打印(结果)// abc
 让分数= [“ 1”,“ 2”,“三”,“ 4”] 
让scoresInt =分数。 映射 {Int($ 0)}
print(scoresInt)// 1 2无4
 让分数= [“ 1”,“ 2”,“三”,“ 4”] 
让scoresInt =分数。 flatMap {Int($ 0)} //检查解析为nil
print(scoresInt)// 1 2 4

2. Flatmap :init方法
视频:解析数据->模型,过滤器无解析错误。

  fileprivate struct用户{ 
let id:整数
命名:字符串
初始化?(字典:[String:Any]){
守护
让id = dictionary [“ id”]为? 诠释
让name = dictionary [“ name”]为? 串
其他{
返回零
}
self.id = id
self.name =名称
}
}
var users =词典。 flatMap (User.init)

3.Làmphẳng数组,chuyển2chiều-> 1chiều:dùngflatMap, 加入

 让arrayOfArrays = [[1,1],[2,2],[3,3]] 
让arrMultiple2 = arrayOfArrays。 映射 {数组在
返回数组。 映射 {中的整数
返回整数* 2
}
} // [[2,2],[4,4],[6,6]]
  var flattened1 = arrayOfArrays。  flatMap {数组在 
返回数组。 映射 {中的整数
返回整数* 2
}
} // 2 2 4 4 6 6
  var flattened2 = Array(arrMultiple2。join())// 2 2 4 4 6 6 
var flattend3 = arrayOfArrays。 flatMap {$ 0} // 1 1 2 2 3 3
  //Nhân2 
var flattend4 = arrayOfArrays。 flatMap {$ 0.map {$ 0 * 2}} // 2 2 4 4 6 6