我正在考虑自定义集合
,例如:
for i in [1, 2, nil].nilValuesRemoved() {
print(i)
}
将打印:
1
2
实际的 .nilValuesRemoved()
调用将是 O(1)
,与 .reverse()
的工作方式类似。这可能吗?
最佳答案
这是一个惰性的紧凑 map :
for i in ([1, 2, nil].lazy.compactMap{$0}) {
print(i)
}
这会在 O(1) 时间内创建一个 LazyMapSequence
。
.lazy
是此问题的通用解决方案,使应用程序的复杂度为 O(1) 并避免中间分配,但代价是使多次迭代更加昂贵。
虽然问题很清楚,但这个问题的标题可能会让一些读者感到困惑。明确地说:实际上迭代结果仍然是 O(n),就像迭代 .reverse()
的结果是 O(n),即使调用 .reverse ()
的复杂度为 O(1)。
关于arrays - 有没有 O(1) 的方法从 Swift 集合中删除 nil 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61367119/