静态动态数组
2015-08-22 21:30
337 查看
静态数组NSArray初始化之后不能进行修改。只能读取!**
动态数组初始化之后还可以继续进行增删查改操作。
动态数组在删除时与C语言中的数组区别。
C中数组进行遍历修改或者删除时,下标不会发生改变。
动态数组删除时数组元素下标动态改变。
上述方法是想要是删除数组元素中首字母是q的元素。也就是应该删除q2,q3。
输出结果:结果显示只删除了q2,q3并没有删除。
原因:删除第一个元素q2之后,之后的数组元素的下标发生改变,
q3由1变为0,可是此时 i =1,所以q3就不会被遍历到。所以q3没有被删除。
也就是动态数组当前一个数组元素被删除后,相邻的后一个元素数组下标前移。
改进方法,添加语句i–,避免出现漏掉元素的情况。
removeObject
- (void)removeObject:(id)anObject; 删除与anObject对象相等的那个元素,只要相等都删除。
结果:删除了所有是 q 的对象。
即使是在数组遍历的时候也会这样执行,例:
for第一次遍历时 i=0;array[0]=q2;
执行 [array removeObject:arrar[i]]; 本意删除array[0]元素,可是array[0]=array[1],根据removeObject 是删除原理。所以两个都一块删除。
结果如下:
总结:动态数组修改时一定要注意元素下标改变问题。注意removeObject用法。
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并没有删除。
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用法。
相关文章推荐
- iOS_17_控制开关_TabBarController_由storyboard道路
- Sumdiv(快速幂+约数和)
- linux下配置jdk环境变量的三种方法
- MAC 系统升级10.10以后PHP验证码错误的解决办法。[ 一行代码轻松解决! ]
- Sumdiv(快速幂+约数和)
- 终于有人把“约炮经济学”讲清楚了
- OpenGL之坐标转换(好文-清晰版)
- storm shuffleGrouping随机分组
- 位图文件存储空间的计算
- 找出二叉查找树中指定结点的”下一个"结点(也即中序后继)
- 数组复制的误区
- [LeetCode][JavaScript]Ugly Number II
- 【软工5】:软件工程的发展和体系结构
- 【软工5】:软件工程的发展和体系结构
- Android Api Demos登顶之路(四十四)Launcher Shortcuts
- 封装RabbitMQ.NET Library 的一点经验总结
- R语言之文本挖掘
- 115个Java面试题和答案——终极列表(下)
- 比赛
- Linux Haproxy 安装和部署