您的位置:首页 > 其它

静态动态数组

2015-08-22 21:30 337 查看
静态数组NSArray初始化之后不能进行修改。只能读取!**

NSArray *arr=[[NSArray alloc]init];
//        [arr addObject:@"we"];    // 出错
//        [arr removeObject:@"we"];   // 出错
//        [arr addObjectsFromArray:arr];  // 出错
所以 NSArray *arr=[[NSArray alloc]init];对于静态数组来说是没用的,因为这样之后不能对arr进行任何修改,访问又没有元素。所以要在定义的时候进行初始化赋值。


动态数组初始化之后还可以继续进行增删查改操作。

NSMutableArray *array=[[ NSMutableArray alloc]initWithObjects:@"q2",@"q3",@"o2",@"o2", nil];
[array addObject:@"we"];
[array removeObject:@"we"];
[array addObjectsFromArray:arr];
//动态数组中是有用的。
NSMutableArray *array1=[[NSMutableArray alloc]init];


动态数组在删除时与C语言中的数组区别。

C中数组进行遍历修改或者删除时,下标不会发生改变。

动态数组删除时数组元素下标动态改变。

NSMutableArray *array=[[ NSMutableArray alloc]initWithObjects:@"q2",@"q3",@"o2",@"o2", nil];
NSLog(@"%@",array);
for (int i=0; i<[array count]; i++) {    //遍历数组
NSString *first=[array[i] substringToIndex:1];//取出每个数组元素的首字母。substringToIndex:1,从0 到1
if ([first isEqualTo:@"q"]) {
[array removeObjectAtIndex:i];  //根据下标删除元素
//i--;
NSLog(@"YES");
}
}


上述方法是想要是删除数组元素中首字母是q的元素。也就是应该删除q2,q3。

输出结果:结果显示只删除了q2,q3并没有删除。



原因:删除第一个元素q2之后,之后的数组元素的下标发生改变,

q3由1变为0,可是此时 i =1,所以q3就不会被遍历到。所以q3没有被删除。

也就是动态数组当前一个数组元素被删除后,相邻的后一个元素数组下标前移。

改进方法,添加语句i–,避免出现漏掉元素的情况。

removeObject

- (void)removeObject:(id)anObject; 删除与anObject对象相等的那个元素,只要相等都删除。

NSMutableArray *array1=[[ NSMutableArray alloc]initWithObjects:@"q",@"q",@"o",@"o", nil];
NSLog(@"修改之前%@",array1);
[array1 removeObject:@"q"];
NSLog(@"修改之后%@",array1);


结果:删除了所有是 q 的对象。



即使是在数组遍历的时候也会这样执行,例:

NSMutableArray *array=[[ NSMutableArray alloc]initWithObjects:@"q2",@"q2",@"o2",@"o2", nil];
NSLog(@"%@",array);
for (int i=0; i<[array count]; i++) {    //遍历数组
NSString *first=[array[i] substringToIndex:1];//取出每个数组元素的首字母。substringToIndex:1,从0 到1
if ([first isEqualTo:@"q"]) {
[array removeObject:array[i]];
NSLog(@"YES");
}
}


for第一次遍历时 i=0;array[0]=q2;

执行 [array removeObject:arrar[i]]; 本意删除array[0]元素,可是array[0]=array[1],根据removeObject 是删除原理。所以两个都一块删除。

结果如下:



总结:动态数组修改时一定要注意元素下标改变问题。注意removeObject用法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: