数组遍历删除元素最佳方法之逆遍历

可能存在的问题:

如果数组正序遍历过程中,如果删除了某一个元素以后,可能会造成数组越界导致程序崩溃

解决方法:

1、如果只删除一个元素可以使用普通遍历,找到元素直接删除,然后直接break;

2、当删除多个元素时,使用逆序遍历(倒着来)

例如使用OC :

// 逆序遍历,然后查找删除

NSEnumerator *enumerator = [array reverseObjectEnumerator];

//forin遍历

for (AddressPerson *groupName in enumerator) {

if ([[groupName group] isEqualToString:@"Zhangsan"]) {

[array removeObject:groupName];

}

}

正序崩溃原因:

 具体情况是这样的,当我们正序遍历时,如果删除了一个,那么没有遍历到的元素位置都会往前移动一位,这样系统就无法确定接下来遍历是从删除位置开始呢,还是从删除位置下一位开始呢?这样就造成程序crash了.对于逆序遍历就不会,因为我们逆序遍历时,遇到匹配的元素删除后,位置改变的是遍历过得元素,而没有遍历到的元素位置却没有改变,所以遍历能够正常进行

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容