Objective-c中的使用数组的类是NSArray和NSMutableArray。一个是不可变数组,另一个是可变数组。
我们先看一下不可变数组NSArray。
NSArray保存的对象可以是不同的对象。但
NSArray类有两个限制:
1 它只能存储Objective-C对象,不能存储基础数据类型(int、float、BOOL等)。
2 它不能存粗nil(对象的零值和NULL)。
<span style="white-space:pre"> </span>//ios 6 快捷初始化 NSArray *ary = @[@"top",@"jungle",@"mid",@"adc",@"support"]; NSLog(@"ary = %@",ary); //实例方法初始化 NSArray *ary1 = [[NSArray alloc] initWithObjects:@"top",@"adc",@"apc",@"jungle", nil]; NSLog(@"ary1 = %@",ary1); NSArray *ary2 = [[NSArray alloc] initWithArray:ary1]; NSLog(@"ary2 = %@",ary2); //类方法初始化 NSArray *ary3 = [NSArray arrayWithObject:@23]; NSLog(@"ary3 = %@",ary3); NSArray *ary4 = [NSArray arrayWithObjects:@"top",@"adc",@"apc",@"jungle", nil]; NSLog(@"ary4 = %@",ary4); NSArray *ary5 = [NSArray arrayWithArray:ary2]; NSLog(@"ary5 = %@",ary5);
2016-01-09 14:28:09.001 命令行工程[13776:1114249] ary = ( top, jungle, mid, adc, support ) 2016-01-09 14:28:09.002 命令行工程[13776:1114249] ary1 = ( top, adc, apc, jungle ) 2016-01-09 14:28:09.002 命令行工程[13776:1114249] ary2 = ( top, adc, apc, jungle ) 2016-01-09 14:28:09.002 命令行工程[13776:1114249] ary3 = ( 23 ) 2016-01-09 14:28:09.002 命令行工程[13776:1114249] ary4 = ( top, adc, apc, jungle ) 2016-01-09 14:28:09.002 命令行工程[13776:1114249] ary5 = ( top, adc, apc, jungle )
因为这几个都是它的属性,所以既可以用点语法,也可以用属性点get方法。
NSArray *ary = @[@"top",@"jungle",@"mid",@"adc",@"support"]; //ary.count == [ary count]; NSLog(@"数组长度 = %lu",ary.count); //ary.firstObject == [ary firstObject]; NSLog(@"第一个对象 = %@",ary.firstObject); //ary.lastObject == [ary lastObject]; NSLog(@"最后一个对象 = %@",ary.lastObject); //ary.sortedArrayHint == [ary sortedArrayHint]; NSLog(@"NSData 的对象 = %@",ary.sortedArrayHint); //ary.description == [ary description]; NSLog(@"description方法 = %@",ary.description);
2016-01-09 14:46:47.843 命令行工程[13938:1120615] 数组长度 = 5 2016-01-09 14:46:47.845 命令行工程[13938:1120615] 第一个对象 = top 2016-01-09 14:46:47.845 命令行工程[13938:1120615] 最后一个对象 = support 2016-01-09 14:46:47.845 命令行工程[13938:1120615] NSData 的对象 = <066c711f 4bb3d7a3 25b7311f 83b1c41e 24219268> 2016-01-09 14:46:47.845 命令行工程[13938:1120615] description方法 = ( top, jungle, mid, adc, support )
NSArray *ary = @[@"top",@"jungle"]; //在最后添加一个OC对象,形成一个新的数组。 NSArray *ary1 = [ary arrayByAddingObject:@"lol"]; NSLog(@"ary1 = %@",ary1); //在最后添加多个对象,形成一个新的数组。 NSArray *ary2 = [ary arrayByAddingObjectsFromArray:ary1]; NSLog(@"ary2 = %@",ary2); NSLog(@"ary2的长度 = %lu",ary2.count); //截取数组一部分创建新的数组 NSArray *ary3 = [ary2 subarrayWithRange:NSMakeRange(1, 3)]; NSLog(@"ary3 = %@",ary3); //ary并没有改变,只是通过它派生出新的数组。 NSLog(@"ary = %@",ary);输出:
2016-01-09 15:00:19.145 命令行工程[14046:1124762] ary1 = ( top, jungle, lol ) 2016-01-09 15:00:19.146 命令行工程[14046:1124762] ary2 = ( top, jungle, top, jungle, lol ) 2016-01-09 15:00:19.146 命令行工程[14046:1124762] ary2的长度 = 5 2016-01-09 15:00:19.146 命令行工程[14046:1124762] ary3 = ( jungle, top, jungle ) 2016-01-09 15:00:19.146 命令行工程[14046:1124762] ary = ( top, jungle )
NSArray *ary = @[@"top",@"jungle",@"mid",@"adc",@"support"]; //访问某个指定位置的对象 NSString *str = ary[2]; //也可以使用 [ary objectAtIndex:2] NSLog(@"str = %@",str); //对象在数组中的位置 unsigned long ind = [ary indexOfObject:@"adc"]; NSLog(@"adc在数组中的下标 = %lu",ind); //如果没存在这个对象 会输出。。。 NSLog(@"adddd在数组中的下标 = %lu",[ary indexOfObject:@"ad"]); //是否包含某个对象 0 false 1 true BOOL co = [ary containsObject:@"support"]; NSLog(@"ary是否包含字符串support %i",co); //数组连接参数形成字符串 NSString *str1 = [ary componentsJoinedByString:@""]; NSLog(@"str1 = %@",str1); NSString *str2 = [ary componentsJoinedByString:@"!"]; NSLog(@"str2 = %@",str2);输出:
2016-01-09 15:23:20.569 命令行工程[14265:1134215] str = mid 2016-01-09 15:23:20.570 命令行工程[14265:1134215] adc在数组中的下标 = 3 2016-01-09 15:23:20.570 命令行工程[14265:1134215] adddd在数组中的下标 = 9223372036854775807 2016-01-09 15:23:20.570 命令行工程[14265:1134215] ary是否包含字符串support 1 2016-01-09 15:23:20.571 命令行工程[14265:1134215] str1 = topjunglemidadcsupport 2016-01-09 15:23:20.571 命令行工程[14265:1134215] str2 = top!jungle!mid!adc!support