美文网首页闻道丶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了.对于逆序遍历就不会,因为我们逆序遍历时,遇到匹配的元素删除后,位置改变的是遍历过得元素,而没有遍历到的元素位置却没有改变,所以遍历能够正常进行

    相关文章

      网友评论

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

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

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