NSMutableArray 删除可变数组元素

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

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

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

使用倒序forin 删除元素

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

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

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

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

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

原文地址:https://www.cnblogs.com/GJ-ios/p/11758823.html

时间: 2024-10-03 22:29:27

NSMutableArray 删除可变数组元素的相关文章

NSMutableArray(可变数组)(九)

1. //NSMutableArray(可变数组) //        NSMutableArray *marr2 = [[NSMutableArray alloc]initWithObjects:@"1",@"2",@"3" ,nil]; NSMutableArray *marr1 = [[NSMutableArray alloc]init];//因为是可变数组,这时只需要给一个空得数组即可,所以只用init //添加 [marr1 addOb

jQuery根据元素值来删除一个数组元素及数组对象方法

在前提不知道b在这个数组的下标,删除b这个元素  var arrList = ['a','b','c','d'];         arrList.splice(jQuery.inArray('b',arrList),1); alert(arrList); 其中jQuery.inArray('b',arrList)是b这个元素在数组arrList 中的位置 splice(index,1)函数中第一个参数index是要删除元素在数组中的位置,第二个参数是要删除的数量. Array对象的方法有: c

Objective-C 数组与可变数组

知识点 1.NSArray 类的重点函数使用 2.NSMutableArray 类的重点函数使用 3.字符串的分割和拼接 ============================ NSArray,    NSMutableArray 1.[需要理解的知识] 1.1 C语言中数组 1. 相同数据类型的集合: int a[10]; float b[20]; char c[30]; 2. 数组地址是连续; 1.OC数组和c数组的区别 1.NSArray是个类 数组是对象: 存储也是对象: 2.数组不能

随机获取数组元素 和 数组元素随机排序

<script type="text/javascript"> //随机取得数组中的一个元素 function Rand(){ var arr=[11,22,33,44]; var a=Math.floor(Math.random()*arr.length);//Math.floor(Math.random()); //Math.floor()方法执行的是向下取整计算,它返回的是小于或等于函数参数,并且与之最接近的整数. //alert(Math.random()*arr.

Objective - C NSArray不可变数组和NSMutableArray可变数组

OC中存储数据最常用 的两个容器就是数组和字典,而作为最常用的,应该了解这所有的特点,及用法. OC中的数组是一个容量,有序的管理了一系列元素,并且存放在数组里的元素,必须是对象类型. 不可变数组,见名知意,不可改变的,只要创建成功之后都不能改变数组容量,元素. 创建一个不可变数组对象 //1.初始化方法(多个对象用逗号隔开,并且最后一个对象与nil之间也要有逗号) NSArray *array1 = [[NSArray alloc] initWithObjects:@"zhonger"

可变数组NSMutableArray

//NSMutableArray 继承至 NSArray // NSArray * array = @[]; //1.创建可变数组 NSMutableArray * array = [[NSMutableArray alloc] initWithCapacity:0]; //使用addObject 动态给数组中增加元素 /* [array addObject:@"one"]; [array addObject:@"two"]; [array addObject:@&

NSArray与NSMutableArray 数组与可变数组的创建和遍历 复习

1.NSArray 是一个父类,NSMUtableArray是其子类,他们构成了OC的数组. 2.NSArray的创建 NSArray * array = [[NSArray alloc]initWithObjects:@"one",@"two",@"three",@"four good",nil];//用对象初始化一个数组,这里是任意四个对象,不一定是字符串.//OC中的数组,不是真正的数组,这是一个链表,nil的作用正是表

NSArray与NSMutableArray 数组与可变数组

1.NSArray 是一个父类,NSMUtableArray是其子类,他们构成了OC的数组.2.NSArray的创建NSArray * array = [[NSArray alloc]initWithObjects:@"one",@"two",@"three",@"four good",nil];//用对象初始化一个数组,这里是任意四个对象,不一定是字符串.//OC中的数组,不是真正的数组,这是一个链表,nil的作用正是表明结

可变数组:创建 添加 插入 删除 替换

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //可变数组继承不可变数组 //1创建 设定元素个数进行创建 NSMutableArray *str=[NSMutableArray arrayWithCapacity:7]; //2想数组中添加一个元素 NSArray *[email protected][@"MON",@"