平时使用 NSMutableArray
中常常用到遍历删除数组元素的问题。
通常第一个想法是使用一下 forin
就解决了,可是老司机都会知道使用 forin
作删除操做的时候会 crash。
报错的缘由是:数组
当数组在枚举的时候被修改了,由于数组规定在
forin
遍历的时候不能修改数组元素。
可是有一种特殊状况,就是在删除数组最后一个元素的时候能够使用forin
,由于到最后一个元素的时候forin
枚举已经结束了,这时候删除元素不会影响到forin
工做。code
NSMutableArray *nameArray = @[@"1", @"2", @"3", @"4"];
使用倒序forin
删除元素blog
//建立逆序遍历 NSEnumerator *enume = [nameArray reverseObjectEnumerator]; for (NSString *name in enumerator) { if ([name isEqualToString:@"2"]) { [array removeObject:name]; } }
使用 for 循环进行遍历删除
遍历整个数组,找到对应的元素,而后执行删除操做 rem
for (int i = 0; i < count; ++i) { NSString *name = nameArray[i]; if ([name isEqualToString:@"2"]) { nameArray removeObject:name]; } }
还有一种方式是定义一个副本数组,对这个副本数组进行遍历,在原数组中进行删除操做it
NSMutableArray *copyNameArray = [NSMutableArray arrayWithArray:nameArray]; for (NSString *name in copyNameArray) { if ([name isEqualToString:@"2"]) { [nameArray removeObject:name]; } }