- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
基本问题。在 Swift 中从可变数组中有选择地移除和删除项的最佳方法是什么?
有些选项似乎不适合这种情况,例如在
中调用 removeObject和其他似乎一般都有效的
是否有推荐的、简单且安全的方法来从数组中删除项目?我提到的其中一个或我缺少的东西?
如果对此有不同的看法(有利有弊)或偏好,那就太好了。我仍在努力选择合适的。
最佳答案
如果你想根据条件从 NSMutableArray
中循环和删除元素,你可以以相反的顺序循环数组(从最后一个索引到零),并删除满足条件的对象。
例如,如果您有一个整数数组并且想要删除可被三整除的数字,您可以像这样运行循环:
var array: NSMutableArray = [1, 2, 3, 4, 5, 6, 7];
for index in stride(from: array.count - 1, through: 0, by: -1) {
if array[index] as Int % 3 == 0 {
array.removeObjectAtIndex(index)
}
}
以相反顺序循环可确保仍要检查的数组元素的索引不会更改。相反,在转发模式下,如果您删除第一个元素,那么之前位于索引 1 的元素将更改为索引 0,您必须在代码中考虑到这一点。
出于性能原因,不建议在循环中使用 removeObject
(不适用于上述代码),因为它的实现遍历数组的所有元素并使用 isEqualTo
判断是否移除对象。复杂度顺序从 O(n) 提高到 O(n^2) - 在最坏的情况下,删除数组的所有元素,在主循环中遍历一次数组,并为每个元素再次遍历大批。因此,应避免所有基于枚举 block 、for-in
等的解决方案,除非您有充分的理由。
filter
是一个很好的选择,我会使用它,因为:
虽然它可能并不适用于所有情况,因为正如您所说,它会生成一个新数组而不是就地操作。
关于swift - 在 Swift 中有选择地从 NSMutableArray 中移除和删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25699987/
我正在做一个项目,我的 android 在这个项目中作为一个网络服务器工作;输入带端口号的 IP 地址,打开 Web 界面,用户可以将文件上传到手机。我想在 Web 界面上显示一些图片,以便我们的界面
我是一名优秀的程序员,十分优秀!