Swift flatMap:如何从数组中仅删除元组中特定元素为零的元组?
Posted
技术标签:
【中文标题】Swift flatMap:如何从数组中仅删除元组中特定元素为零的元组?【英文标题】:Swift flatMap: How to remove only tuples from an array where specific element in the tuple is nil? 【发布时间】:2018-02-06 10:51:31 【问题描述】:我有一个元组数组,其中元组包含一些可选值:
let arrayOfTuples: [(Int, String?, String?)] = ...
我怎样才能最好地从数组中删除元组的 第二个元素 为 nil 的元组(无论第三个元素是否为 nil)?
当我使用flatMap
时喜欢
let flatTuplesArray: [(Int, String, String)] = arrayOfTuples.flatMap( ($0, $1, $2) )
如果元组的第二个或第三个元素 为零,则元组不会出现在结果flatTuplesArray
中。
我想应用 flatMap
仅在元组的前两个元素($0 和 $1)上,但结果数组应该仍然包含三个元素的元组(并且包含 ""
为 $2零值)。
【问题讨论】:
【参考方案1】:您可以在第二个元组元素上使用Optional.map
来展开
它或将其删除(通过外部 flatMap
),以及第三个元组元素上的 nil-coalescing ??
用空字符串替换nil
:
let arrayOfTuples: [(Int, String?, String?)] = [(1, "a", "b"), (2, nil, "c"), (3, "d", nil)]
let flatTuplesArray = arrayOfTuples.flatMap
t in t.1.map (t.0, $0, t.2 ?? "")
print(flatTuplesArray)
// [(1, "a", "b"), (3, "d", "")]
如果 t.1
是 nil
则 t.1.map ...
计算结果为 nil
并且是
被flatMap
忽略。否则 t.1.map ...
评估为
闭包的值,$0
是 unwrapped 秒
元组元素。
【讨论】:
【参考方案2】:或许filter
可以帮到你:
let arrayOfTuples: [(Int, String?, String?)] = [(1, nil, nil), (2, "", nil)]
let result = arrayOfTuples.filter( $0.1 != nil )
print(result) // [(2, Optional(""), nil)]
【讨论】:
以上是关于Swift flatMap:如何从数组中仅删除元组中特定元素为零的元组?的主要内容,如果未能解决你的问题,请参考以下文章
Swift - 使用 map/reduce/flatmap 将数组字典减少为相同类型的单个数组