可能存在的問題:
如果數組正序遍歷過程中,如果刪除了某一個元素以后,可能會造成數組越界導致程序崩潰
解決方法:
1、如果只刪除一個元素可以使用普通遍歷,找到元素直接刪除,然后直接break;
2、當刪除多個元素時,使用逆序遍歷(倒著來)
例如使用OC :
// 逆序遍歷,然后查找刪除
NSEnumerator *enumerator = [array reverseObjectEnumerator];
//forin遍歷
for (AddressPerson *groupName in enumerator) {
if ([[groupName group] isEqualToString:@"Zhangsan"]) {
[array removeObject:groupName];
}
}
正序崩潰原因:
?具體情況是這樣的,當我們正序遍歷時,如果刪除了一個,那么沒有遍歷到的元素位置都會往前移動一位,這樣系統就無法確定接下來遍歷是從刪除位置開始呢,還是從刪除位置下一位開始呢?這樣就造成程序crash了.對于逆序遍歷就不會,因為我們逆序遍歷時,遇到匹配的元素刪除后,位置改變的是遍歷過得元素,而沒有遍歷到的元素位置卻沒有改變,所以遍歷能夠正常進行