|
如果我们在循环中想要删除一个元素,那么将会导致在删除这一位后,这一位后面元素的数组下标全体改变,那么我们如果还按照没有删除元素的时候的方法继续进行访问,那势必会出现问题。
有两种解决方法:
1、将需要删除的元素下标记录下来,最后一并全体删除。
-(NSArray *)filterDatas:(NSArray *)datasource{
if (!ARRAYHASVALUE(datasource)) {
return nil;
}
NSMutableArray * arrayM = [NSMutableArray arrayWithArray:datasource];
NSMutableArray * needDeleteDataM = [[NSMutableArray alloc] init];
for (NSObject * object in arrayM) {
// 需要删除的条件值
BOOL isNeedDelete = YES;
if (isNeedDelete) {
[needDeleteDataM addObject:object];
}
}
if (ARRAYHASVALUE(needDeleteDataM)) {
for (NSObject * object in needDeleteDataM) {
if ([arrayM containsObject:object]) {
[arrayM removeObject:object];
}
}
}
return [arrayM copy];
}
2、在循环中就删除,但是要修改循环条件:
-(NSArray *)filterDatas:(NSArray *)datasource{
if (!ARRAYHASVALUE(datasource)) {
return nil;
}
NSMutableArray * arrayM = [NSMutableArray arrayWithArray:datasource];
for (NSInteger index = 0; index < arrayM.count; index++) {
// 需要删除的条件值
BOOL isNeedDelete = YES;
NSObject * object = [arrayM objectAtIndex:index];
if (isNeedDelete) {
[arrayM removeObject:object];
index--;
}
}
return [arrayM copy];
}
|