Fork me on GitHub

NSMutableArray 删除可变数组元素

平时使用 NSMutableArray 中经常用到遍历删除数组元素的问题。
一般第一个想法是使用一下 forin 就解决了,但是老司机都会知道使用 forin 做删除操作的时候会 crash。
报错的原因是:

当数组在枚举的时候被修改了,因为数组规定在forin遍历的时候不能修改数组元素。
但是有一种特殊情况,就是在删除数组最后一个元素的时候可以使用forin,因为到最后一个元素的时候forin枚举已经结束了,这时候删除元素不会影响到forin工作。

1
NSMutableArray *nameArray = @[@"1", @"2", @"3", @"4"];

 使用倒序forin 删除元素

1
2
3
4
5
6
7
//创建逆序遍历
NSEnumerator *enume = [nameArray reverseObjectEnumerator];
for (NSString *name in enumerator) { 
    if ([name isEqualToString:@"2"]) { 
        [array removeObject:name]; 
    
}

使用 for 循环进行遍历删除
遍历整个数组,找到对应的元素,然后执行删除操作 

1
2
3
4
5
6
for (int i = 0; i < count; ++i) {
    NSString *name = nameArray[i];
    if ([name isEqualToString:@"2"]) {
        nameArray removeObject:name];
    }
}

 还有一种方式是定义一个副本数组,对这个副本数组进行遍历,在原数组中进行删除操作

1
2
3
4
5
6
NSMutableArray *copyNameArray = [NSMutableArray arrayWithArray:nameArray];
for (NSString *name in copyNameArray) {
    if ([name isEqualToString:@"2"]) {
        [nameArray removeObject:name];
    }
}

 

posted @   极度恐慌_JG  阅读(854)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示