美文网首页
iOS 遍历数组删除元素

iOS 遍历数组删除元素

作者: 叩首问路梦码为生 | 来源:发表于2019-03-27 16:57 被阅读0次

下面,我们写一段代码进行测试:

//我们有一个可变数组
NSMutableArray *mArr = [NSMutableArray arrayWithObjects:@1, @2, @3, @4, @5, @6, nil];

// 普通的循环遍历方式
for (NSUInteger i = 0; i < mArr.count; i++) {
   [mArr removeObjectAtIndex:i];
}
NSLog(@"%@", mArr);
//打印结果为:2, 4, 6,而且程序没有crash

// 使用迭代器遍历
[mArr enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
   [mArr removeObject:obj];
}];
NSLog(@"%@", mArr);
//打印结果为:2, 4, 6,而且程序没有crash

// 使用for-in遍历
for (NSNumber *obj in mArr) {
   [mArr removeObject:obj];
}
NSLog(@"%@", mArr);
// 程序crash,
// Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSArrayM: 0x6000002588d0> was mutated while being enumerated.'

所以在可变数组的遍历过程中,根据不同的遍历方式,会产生不同的问题。

那么,如果想在遍历过程中,删除数组的元素,该怎么处理呢
大众的做法是新建一个可变数组,把要想保留的元素,加入到新的数组,方法是可行的,有没有更好的解决方案呢?
答案是有的。采用逆序遍历

// 逆序遍历
[mArr enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
   [mArr removeObject:obj];
}];

// 逆序遍历
for (NSNumber *obj in [mArr reverseObjectEnumerator]) {
   [mArr removeObject:obj];
}

这样,程序就不会crash,数组中的元素也成功移除了。
补充
在实际开发中,笔者建议要谨慎使用,要多加测试,笔者在使用分割字符串后,初始化一个可变数组进行删除操作就crash了。

相关文章

  • iOS 常用的数据处理

    1. iOS遍历数组的同时删除元素 NSMutableArray*array = [NSMutableArraya...

  • js 数组操作

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

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

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

  • iOS 遍历数组删除元素

    下面,我们写一段代码进行测试: 所以在可变数组的遍历过程中,根据不同的遍历方式,会产生不同的问题。 那么,如果想在...

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

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

  • Swift 4.0 数组(Array)学习

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

  • Swift学习之数组、集合和字典

    [toc] 数组 初始化一个数组 增加数组元素 读取数组元素 修改数组元素 删除数组元素 数组遍历 集合 集合类型...

  • swift 集合类型(数组、集合、字典)

    数组 初始化 元素个数 添加新元素 拼合 通过数组索引检索值 元素修改 元素删除 数组遍历 集合 初始化 元素个数...

  • 05-Swift 数组的使用

    一、数组的定义 二、数组的基本操作 增加元素 删除元素 改元素 查元素 三、数组的其它操作 求个数 遍历 数组的合并

  • 5.17js二维数组

    5.17日js数组遍历 数组API push给数组添加元素 pop:删除并返回数组的最后一个元素 unshift:...

网友评论

      本文标题:iOS 遍历数组删除元素

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