一饿自、概念
/**
注意點: 1.這個問題分兩種方式解答.
2.第一種是在循環(huán)遍歷的時候就進行刪除操作.
3.第二種就是在循環(huán)遍歷完之后在進行操作.
*/
二恋脚、實現第一種循環(huán)遍歷刪除操作
1.在使用快速遍歷進行刪除操作之后要加break毙驯,來結束,這樣就不會出現問題颤霎。
NSMutableArray *arr1 = [[NSMutableArrayalloc]initWithObjects:@"SHI",@"XIAO",@"ABC",@"ABC",@"SHI",@"HU",nil];
for(NSString *strin arr1) {
NSLog(@"%@",str);
if([str isEqualToString:@"SHI"]) {
[arr1 removeObject:str];
break;
}
}
2.使用索引計數的方式弟跑,但是要注意的是當我們刪除一個元素時筋栋,arr.count 是進行改變的咒彤,所以可能造成漏刪,所以我們要對索引計數進行操作,每當刪除一個元素時劈伴,都讓i - 1,這樣才能達到不重不漏的效果
NSMutableArray *arr1 = [[NSMutableArrayalloc]initWithObjects:@"SHI",@"XIAO",@"ABC",@"ABC",@"SHI",@"HU",nil];
for(int i =0;i<arr1.count;i++) {
NSLog(@"%lu",arr1.count);
NSString *str = arr1[i];
if([str isEqualToString:@"SHI"]) {
[arr1 removeObjectAtIndex:i];
i--;
}
}
for(NSString *strin arr1) {
NSLog(@"%@",str);
}
3.也是使用引用計數的方式密末,不過要倒序方式來進行刪除握爷,這樣,即使后面的元素被刪除之后严里,也不會影響前面的元素在數組中的index
NSMutableArray *arr1 = [[NSMutableArrayalloc]initWithObjects:@"SHI",@"XIAO",@"ABC",@"ABC",@"SHI",@"HU",nil];
for(int i = (int)arr1.count -1 ; i>=0 ; i--) {
NSLog(@"%lu",arr1.count);
NSString *str = arr1[i];
if([str isEqualToString:@"SHI"]) {
[arr1 removeObjectAtIndex:i];
}
}
for(NSString *strin arr1) {
NSLog(@"%@",str);
}
4.使用系統(tǒng)的方法新啼,enumerateObjectsUsingBlock 里面有一個stop 指針,當我們找到對應的str后刹碾,使*stop = YES 即可燥撞。
[arr1 enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%lu",idx);
if([obj isEqualToString:@"ABC"]) {
*stop = YES;
[arr1 removeObject:obj];
}
}];
三、實現第二種在循環(huán)遍歷完之后在進行操作
注意點:在循環(huán)遍歷完之后在進行操作迷帜,這種方式主要是遍歷找到對應的index物舒,或者說給他添加一個標識符,最后來統(tǒng)一進行刪除戏锹。
1.將要刪除的字符串放在一個數組里冠胯,最后一起刪除
NSMutableArray *arr1 = [[NSMutableArrayalloc]initWithObjects:@"SHI",@"XIAO",@"ABC",@"ABC",@"SHI",@"HU",nil];
NSMutableArray *arr = [[NSMutableArrayalloc]init];
for(NSString *strin arr1) {
if([str isEqualToString:@"SHI"]) {
[arr addObject:str];
break; //如果只刪除某一種字符串,那么當找到這個字符串之后就可以結束锦针,不用再找荠察,免得浪費時間,如果要刪除不止一個字符串奈搜,那么應當找到所有要刪除的字符串在進行刪除
}
}
[arr1 removeObjectsInArray:arr];
2.將要刪除的字符串所在的下表添加在一個NSMutableIndexSet 中悉盆,最后一起刪除
NSMutableArray *arr1 = [[NSMutableArrayalloc]initWithObjects:@"SHI",@"XIAO",@"ABC",@"ABC",@"SHI",@"HU",nil];
NSMutableIndexSet *set = [[NSMutableIndexSetalloc]init];
for(int i =0 ; i < arr1.count ; i++) {
NSString *str = arr1[i];
if([str isEqualToString:@"SHI"]) {
[set addIndex:i];
}
}
[arr1 removeObjectsAtIndexes:set];