美文网首页闻道丶iOS(大杂烩)实用轮子iOS Developer
数组遍历删除元素最佳方法之逆遍历

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

作者: 简简单单写书 | 来源:发表于2017-03-08 18:56 被阅读184次

可能存在的问题:

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

解决方法:

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

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

例如使用OC :

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

NSEnumerator *enumerator = [array reverseObjectEnumerator];

//forin遍历

for (AddressPerson *groupName in enumerator) {

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

[array removeObject:groupName];

}

}

正序崩溃原因:

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

相关文章

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

    可能存在的问题: 如果数组正序遍历过程中,如果删除了某一个元素以后,可能会造成数组越界导致程序崩溃 解决方法: 1...

  • js 数组操作

    遍历删除元素: 遍历数组:for循环遍历: forEach遍历:

  • 87-删除数组元素注意点

    需求: 遍历数组的同时删除数组中所有的元素通过传统遍历数组的方式弊端: 删除不尽元素 let arr = [...

  • 遍历数组的同时删除元素引起崩溃的问题以及解决方案

    遍历数组的同时删除元素引起崩溃的问题 一、问题 使用 for in遍历可变数组的同时删除元素会造成崩溃 崩溃日志为...

  • JS一次性删除数组中多个元素

    使用for普通写法或者forEach遍历数组,方法体内部使用splice方法删除数组元素,会删除的不全。想要完美实...

  • *** Collection <__NSArrayM: 0

    在数组遍历的过程中出现这个问题,该是因为在遍历的过程中修改了数组中的元素例如删除导致。例如: 解决方法:

  • ios数组

    //枚举遍历和for循环遍历可以在遍历的同时删除里面的元素,但用for in会出现数组越界异常,要想用for in...

  • Swift 4.0 数组(Array)学习

    定义数组常量(常量只有读操作) 定义数组变量 赋值 取值 删除元素 添加元素 元素重新赋值 数组遍历

  • js中数组去重的几种方法

    方法一: 遍历数组元素,若元素在结果数组中不存在,则添加至结果数组中,最终返回结果集,代码如下: 方法二: 遍历数...

  • LeetCode026 删除排序数组中的重复项

    题目: 思路: 方法一:遍历数组,当遇到重复的元素,利用splice(i,1)从第i位置开始删除,删除一个元素 代...

网友评论

  • panzhangbao:受教了:+1:
  • Noah1985:。。。。。。。
    for in里在可变数组后面加一个copy不就得了
  • 尹_路人:不错,好技巧,以前我遇到需要遍历数组删除的情况都是先遍历一遍拿到下标放进数组,再遍历下标数组执行删除

本文标题:数组遍历删除元素最佳方法之逆遍历

本文链接:https://www.haomeiwen.com/subject/ihqigttx.html