作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个元组数组,其中元组包含一些可选值:
让 arrayOfTuples: [(Int, String?, String?)] = ...
我怎样才能最好地从数组中删除那些元组的第二个元素为零的元组(无论第三个元素是否为零)?
当我使用 flatMap
时
let flatTuplesArray: [(Int, String, String)] = arrayOfTuples.flatMap({ ($0, $1, $2) })
然后元组不会出现在生成的 flatTuplesArray 中
如果元组的第二个或第三个元素 为零。
我想应用 flatMap
仅在元组的前两个元素($0 和 $1)上,但结果数组仍应包含具有三个元素的元组(并包含“”
$2 零值)。
最佳答案
您可以使用 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元组元素。
关于arrays - swift 平面 map : How to remove only tuples from an array where specific element in the tuple is nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48641214/
我是一名优秀的程序员,十分优秀!