黑马程序员——OC基础---Foundation之数组
来源:互联网 发布:淘宝助理如何描述宝贝 编辑:程序博客网 时间:2024/05/16 00:52
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
一、NSArray不可变数组
代码示例:
#import <Foundation/Foundation.h>//NSArray的基本操作void test1(){ //OC数组不能存放nil值 //OC数组只能存放OC对象,不能存放基本数据类型,如int,struct,enum NSArray *array1 = [NSArray arrayWithObjects:@"jack",@"rose", nil]; //快速创建一个NSArray对象 NSArray *array2 = @[@"ads",@"sada",@"sadafs"]; //数组长度 NSLog(@"%ld",array1.count); //是否包含某个对象 NSLog(@"%d",[array1 containsObject:@"cde"]); //最后一个对象 NSLog(@"%@",[array1 lastObject]); //对象所在的位置 NSLog(@"%ld",[array1 indexOfObject:@"jack"]);}//数组的遍历void test2(){ NSObject *obj=[[NSObject alloc]init]; NSArray *array=[[NSArray alloc] initWithObjects:@"abc",obj,@"cde",@"opq",@25, nil]; //方法1 for(int i=0;i<array.count;++i){ NSLog(@"method1:index %d is %@",i,[array objectAtIndex:i]); } /*结果: method1:index 0 is abc method1:index 1 is <NSObject: 0x100106de0> method1:index 2 is cde method1:index 3 is opq method1:index 4 is 25 */ //方法2 for(id obj in array){ NSLog(@"method2:index %ld is %@",[array indexOfObject:obj],obj); } /*结果: method2:index 0 is abc method2:index 1 is <NSObject: 0x100602f00> method2:index 2 is cde method2:index 3 is opq method2:index 4 is 25 */ //方法3,利用代码块方法 [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSLog(@"method3:index %ld is %@",idx,obj); if(idx==2){//当idx=2时设置*stop为YES停止遍历 *stop=YES; } }]; /*结果: method3:index 0 is abc method3:index 1 is <NSObject: 0x100106de0> method3:index 2 is cde */ //方法4,利用迭代器 //NSEnumerator *enumerator= [array objectEnumerator];//获得一个迭代器 NSEnumerator *enumerator=[array reverseObjectEnumerator];//获取一个反向迭代器 //NSLog(@"all:%@",[enumerator allObjects]);//获取所有迭代对象,注意调用完此方法迭代器就遍历完了,下面的nextObject就没有值了 id obj2=nil; while (obj2=[enumerator nextObject]) { NSLog(@"method4:%@",obj2); } /*结果: method4:25 method4:opq method4:cde method4:<NSObject: 0x100106de0> method4:abc */}//数组派生出新的数组void test3(){ NSArray *array=[NSArray arrayWithObjects:@"1",@"2",@"3", nil]; NSArray *array2=[array arrayByAddingObject:@"4"];//注意此时array并没有变 NSLog(@"%@",array2); /*结果: ( 1, 2, 3, 4 ) */ //追加形成新的数组 NSLog(@"%@",[array2 arrayByAddingObjectsFromArray:[NSArray arrayWithObjects:@"5",@"6", nil]]); /*结果: ( 1, 2, 3, 4, 5, 6 ) */ NSLog(@"%@",[array2 subarrayWithRange:NSMakeRange(1, 3)]);//根据一定范围取得生成一个新的数组 /*结果: ( 2, 3, 4 ) */ NSLog(@"%@",[array componentsJoinedByString:@","]);//数组连接,形成一个字符串 //结果:1,2,3}//数组排序void test4(){ //方法1,使用自带的比较器 NSArray *array=[NSArray arrayWithObjects:@"3",@"1",@"2", nil]; NSArray *array2= [array sortedArrayUsingSelector:@selector(compare:)]; NSLog(@"%@",array2); /*结果: ( 1, 2, 3 ) */}int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... test1(); } return 0;}
需要注意几点:
NSArray中只能存放对象,不能存放基本数据类型,通常我们可以通过在基本数据类型前加@进行转换;
数组中的元素后面必须加nil以表示数据结束;
makeObjectsPerformSelector执行数组中对象的方法,其参数最多只能有一个;
上面数组操作中无论是数组的追加、删除、截取都没有改变原来的数组,只是产生了新的数组而已;
对象的比较除了使用系统自带的方法,我们可以通过自定义比较器的方法来实现;
二、NSMutableArray可变数组
示例:
#import <Foundation/Foundation.h>//添加元素void test1(){ //初始化数组 NSMutableArray *array = [NSMutableArray arrayWithObjects:@"jack",@"rose", nil]; //添加元素 [array addObject:@"sad"]; //变量输出 for (int i = 0; i<array.count; i++) { NSLog(@"%@",[array objectAtIndex:i]); }}//运行结果/* 2015-11-06 20:41:13.476 NSMutableArray[3715:373240] jack 2015-11-06 20:41:13.477 NSMutableArray[3715:373240] rose 2015-11-06 20:41:13.477 NSMutableArray[3715:373240] sad Program ended with exit code: 0 *///删除元素void test2(){ //初始化数组 NSMutableArray *array = [NSMutableArray arrayWithObjects:@"jack",@"rose", nil]; //删除所有元素 [array removeAllObjects]; NSLog(@"%ld",array.count);//输出结果为0; NSMutableArray *array1 = [NSMutableArray arrayWithObjects:@"jack",@"rose",@"1231", nil]; //删除指定的对象 [array1 removeObject:@"1231"]; NSLog(@"%@",array1); //删除第某个元素 [array1 removeObjectAtIndex:0]; NSLog(@"%@",array1);}//运行结果/* 2015-11-06 20:51:52.531 NSMutableArray[3785:378182] 0 2015-11-06 20:51:52.531 NSMutableArray[3785:378182] ( jack, rose ) 2015-11-06 20:51:52.532 NSMutableArray[3785:378182] ( rose ) Program ended with exit code: 0 */int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... test2(); } return 0;}
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
0 0
- 黑马程序员——OC基础---Foundation之数组
- 黑马程序员——OC基础---Foundation之NSString
- 黑马程序员——OC基础---Foundation之字典
- 黑马程序员——OC基础05—Foundation框架
- 黑马程序员—OC语言基础—Foundation框架小结
- 黑马程序员——OC基础---Foundation<NSString,NSArray,NSMultableString>
- 黑马程序员——ios开发基础之OC中的Foundation框架(一)
- 黑马程序员——OC基础---Foundation框架之结构体
- 黑马程序员——OC笔记之Foundation框架上
- 黑马程序员——OC笔记之Foundation框架下
- 黑马程序员——oc之Foundation框架
- 黑马程序员-IOS基础之OC框架(Foundation)
- 黑马程序员——OC---Foundation
- 黑马程序员——OC语言------Foundation
- 黑马程序员——OC中的Foundation
- 黑马程序员 —OC(Foundation)
- 黑马程序员 —OC(Foundation补充)
- 【黑马程序员】OC-Foundation框架—NSMutableString
- python如何同时输出字符串和变量以及如何将变量值写入文件+对response 返回后的网页进行处理
- Attribute在.net编程中的应用(三)
- UIUC Jia-Bin Huang同学整理的计算机视觉资源 (2)...........持续更新
- Fragment基础点滴学习---Fragment向Activity传递数据
- 安卓开发遇到的第一个问题
- 黑马程序员——OC基础---Foundation之数组
- mysql数据库乱码问题
- Android——PreferenceActivity简单使用
- Attribute在.net编程中的应用(四)
- 日常小结-eclipse安装PyDev插件
- 编译器架构的王者LLVM——(3)用代码生成代码
- CommandTimeOut
- Attribute在.net编程中的应用(五)
- pl/sql