NSArray
NSArray的特点
1.只能存储OC对象
2.长度固定,一旦数组创建完成无法新增和删除元素
3.每个元素都是紧密相连的,可通过下标访问
4.元素是id类型的
5.必须以nil结尾,表示有效元素到此结束
NSArray数组的使用
1. 使用 %@ 可以打印NSArray数组中的所有内容
2. NSArray无法存储基本数据类型,无法存储非OC对象
3. 创建空数组没有意义 eg:NSArray *arr1 = [NSArray new];NSArray *arr2 = [[NSArray alloc] init];NSArray *arr3 = [NSArray array] ;
NSArray取出数组中的元素
1.可以通过下标访问NSArray数组元素 越界就直接报错。 NSArray *arr5=@[@"11",@"22",@"33"];
NSLog(@"%@",arr5[0]);
NSLog(@"%@",arr5[1]);
NSLog(@"%@",arr5[2]);
2.调用NSArray数组对象的对象方法取出指定下标的元素
NSArray *arr5=@[@"11",@"22",@"33"];
NSString *str1 = [arr5 objectAtIndex:0];
NSString *str2 = [arr5 objectAtIndex:1];
NSString *str3 = [arr5 objectAtIndex:2];
3.取出NSArray数组的首元素,除了使用下标,还可以用:arr.firstObject;
区别:如果数组为空,arr[0]运行报错,但firstObject会取到nil;
4.取NSArray数组中最后一个元素:arr.lastObject;
NSArray其他的常用方法
1.得到NSArray数组中元素的个数:
NSLog(@"arr.count = %lu",arr.count);
2.判断NSArray中是否包含指定元素:
BOOL res = [arr containsObject:@"11"];
NSLog(@"%d",res);
3.获取指定元素在NSArray数组中第一次出现的下标:
NSUInteger idx=[arr indexOfObject:@"指定元素"];
NSLog(@"index = %lu",idx);
如果没有找到,返回NSUInteger的最大值:9223372036854775807
NSArray数组的遍历
1.for循环遍历: for(;;){}
2.使用增强for循环:
for(数据类型 变量名 in NSArray数组) {
通过变量名获取NSArray数组中的每一个元素
}
eg:NSArray *arr=@[@"11",@"22",@"33"];
for(NSString *str in arr)
{
NSLog(@"%@ ",str);
}
如果NSArray数组中的元素类型不一致,迭代变量建议使用id类型:
for(id item in arr) {
NSLog(@"%@ ",item);
}
3.使用block遍历
功能:将arr数组中的每一个元素遍历出来,然后执行程序猿传入<#code#>处的代码进行数据处理
注意:1.通过obj获取NSArray数组中的每一个元素
2.idx---当前元素下标
3.将*stop赋值为YES,就可以停止循环
[arr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
<#code#>
}];
eg: NSArray *arr = @[@"Saber",@"Archer",@"Luncer"];
[arr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%@.length = %lu",obj,[obj length]);
NSLog(@"idx = %lu",idx);
if(idx==2) {
*stop=YES;
}
}];
NSArray与字符串
1.将NSArray中的元素链接起来组成新的字符串:
- (NSString *)componentsJoinedByString:(NSString *)separator
参数:连接符
eg: NSArray *arr = @[@"Saber",@"Archer",@"Luncer"];
NSString *str = [arr componentsJoinedByString:@"--"];
NSLog(@"%@ ",str); //Saber--Archer--Luncer
2.将NSString以指定的分隔符分成一个数组,每一部分就是数组的一个元素
NSString *str = @"1,2,3,4,5";
NSArray *arr1 = [str componentsSeparatedByString:@","];
NSLog(@"%@ ",arr1);// 1 2 3 4 5
NSArray的文件操作
1.将定义好的NSarray数组以plist文件方式持久化存储
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile
2.通过plist文件来创建NSArray数组
+ (nullable NSArray<ObjectType> *)arrayWithContentsOfFile:(NSString *)path
NSMutableArray
NSMutableArray的特点
1.NSMutableArray仍是一个数组,是NSArray的子类,具备NSArray的特点 2.NSMutableArray数组的元素可以动态的新增和删除,其他的用法均与NSArray一致
NSMutableArray数组的创建
1.创建空数组,有意义,可以新增元素
NSMutableArray *arr1 = [NSMutableArray new];
NSMutableArray *arr2 = [[NSMutableArray alloc]init];
NSMutableArray *arr3 = [NSMutableArray array];
2.创建非空数组
NSMutableArray *arr4 = [NSMutableArray arrayWithObjects:@"Saber",@"Archer",@"Luncer",@"Caster",nil];
3.注意!!!
这种创建方法是错误的:NSMutableArray *arr = @[@"1",@"2",@"3",@"4"];
这种方法只能用于创建NSArray对象!
向NSMutableArray中新增元素
1.addObject方法:将传入的参数作为数组的元素添加进去
NSMutableArray *arr1 = [NSMutableArray arrayWithObjects:@"Saber",@"Archer",@"Lancer",@"Caster",nil];
[arr addObject:@"Tohsaka"];
[arr addObject:@"Emiya"];
注意:如果传入的参数是一个NSarray数组,则该数组仅作为1个元素新增到NSMutableArray中
eg: NSMutableArray *arr1 = [NSMutableArrayarrayWithObjects:@"Saber",@"Archer",@"Lancer",@"Caster",nil]; //count = 4
NSArray *nsarr = @[@"1",@"2",@"2"];
[arr1 addObject:nsarr];
NSLog(@"%lu",arr1.count); //count = 5
2.addObjectsFromArray方法:将另外一个数组中的每个元素逐个添加到可变数组中
NSMutableArray *arr1 = [NSMutableArrayarrayWithObjects:@"Saber",@"Archer",@"Lancer",@"Caster",nil]; //count = 4
NSArray *nsarr = @[@"1",@"2",@"2"];
[arr1 addObjectsFromArray:nsarr];
NSLog(@"%lu",arr1.count); //count = 7
3.向指定下标之前插入1个元素
NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4",nil]; //1 2 3 4
[arr insertObject:@"0" atIndex:0]; //0 1 2 3 4
[arr insertObject:@"5" atIndex:5]; //0 1 2 3 4 5
删除MutableArray数组中的元素
1.删除指定下标的元素
[arr removeObjectAtIndex:0]; //删除下表为0处的元素
2.删除所有的值为指定值的元素
[arr removeObject:@"Saber"]; //删除值为Saber的元素
3.删除指定范围内的元素
[arr1 removeObject:@"1" inRange:NSMakeRange(0, 2)]; //删除从下标0开始的2个长度范围内的值为“1”的元素
4.删除最后一个元素
[arr removeLastObject];
5.删除所有元素
[arr removeAllObjects];
NSMutableArray的文件操作
1.将数组存进plist文件
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile
eg: [mtarr writeToFile:@"/Users/heyuxuan/Desktop/mtarr.plist" atomically:NO];
2.通过plist文件创建数组
+ (nullable NSMutableArray<ObjectType> *)arrayWithContentsOfFile:(NSString *)path;
eg: NSMutableArray *mtarr = [NSMutableArray arrayWithContentsOfFile:@"/Users/heyuxuan/Desktop/mtarr.plist"];
|