arrays - 有没有 O(1) 的方法从 Swift 集合中删除 nil 值?

标签 arrays swift algorithm

我正在考虑自定义集合,例如:

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/

相关文章:

将 PDF 作为字符串转换为 NSData 后,iOS UIWebView 无法找到 PDF 标题

c++ - 如何知道用于实现标准代码(例如 C++ STL)的确切数据结构和算法?

php - 嵌套集、php 数组和转换

c++ - 通过例程初始化聚合

python - 如何将 numpy 矩阵的元素展开为子矩阵

html - 带空格的 Swift 本地 html 文件

swift - TableView 对最佳窗口宽度的约束

arrays - 如何将RGB{N0f8}类型转换为Array{Float64}

algorithm - K-way归并排序在多台主机上划分

java - Integer[][] 矩阵中的圆圈选择 - Java