平時使用 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]; } }