我从多个教程中都了解到flatMap/compactMap
用于flatten
数组数组,但就我而言,它不能正常工作或无法正确理解。
let myArray = [["Raja","Kumar", nil,"Waqas"],["UAE","SINGAPORE","dUBAI","HONGKONG"]]
let final = myArray.compactMap{ $0 }
print("Result:\(final)")
输出:
Result:[[Optional("Raja"), Optional("Kumar"), nil, Optional("Waqas")], [Optional("UAE"), Optional("SINGAPORE"), Optional("dUBAI"), Optional("HONGKONG")]]
我尝试从上述数组中删除nil,但仍然不能使我的数组变平。
任何帮助将不胜感激。
答案 0 :(得分:5)
.compactMap
...用于生成没有可选对象的列表,您需要在具有compactMap
的内部数组上使用nil
,如下所示:
let result = myArray.map { $0.compactMap { $0 } }
结果: [["Raja", "Kumar", "Waqas"], ["UAE", "SINGAPORE", "dUBAI", "HONGKONG"]]
.flatmap
...例如用于展平集合的集合
let result = myArray.flatMap { $0.compactMap { $0 } }
结果: ["Raja", "Kumar", "Waqas", "UAE", "SINGAPORE", "dUBAI", "HONGKONG"]
答案 1 :(得分:3)
compactMap
应该用于从nil
的数组中过滤出Optional
个元素,而flatMap
可以用来展平多维数组。但是,您需要同时做这两项。
let final = myArray.flatMap{$0.compactMap{$0}}
print("Result:\(final)")
答案 2 :(得分:3)
请阅读文档
返回一个数组,该数组包含将给定闭包映射到序列元素上的结果。
返回一个包含
non-nil
个结果的数组,该结果使用该序列的每个元素调用给定的转换。
返回一个数组,该数组包含用此序列的每个元素调用给定转换的关联结果。
每个讨论部分都包含一个示例。