使用注意##
- 只能存放任意OC对象,有顺序
- 是不可变的,一旦初始化完毕,内容固定,不能删除里面的元素,也不能添加
创建方式##
NSArray *arr1 = [NSArray arrayWithObject:@"lalal"];
//nil是结束符号,也可以保存对象
NSArray *arr2 = [NSArray arrayWithObjects:@"lalal", @"hahaha", @"buyiyang", nil];
//和上一句等价
NSArray *arr3 = @[@"lalal", @"hahaha", @"buyiyang"];
//返回数组长度
[arr count];
//获取数组最后一个元素
[arr lastObject];
//获取数组第一个元素
[arr firstObject];
//获取第3个元素
[arr objectAtIndex:3];
//获取元素简写和C语言差不多
arr[3];
//是否包含某个元素,返回BOOL值
[arr containsObject:@"元素"];
遍历##
1.C语言中常规遍历
2.OC增强for循环遍历
这里写图片描述NSArray *arr = @[@"lalal", @"hahaha", @"buyiyang"];
for (NSString *str in arr) {
NSLog(@"%@", str);
}
//输出为
//NSArray[3837:670457] lalal
//NSArray[3837:670457] hahaha
//NSArray[3837:670457] buyiyang
3.使用OC数组的迭代器来遍历
这里写图片描述点回车
这里写图片描述
每取出一个元素就会调用一次block
每次调用block都会讲当前取出的元素和元素对应的索引传递出来
stop用于控制什么时候停止遍历
这里写图片描述
4.给数组中的对象发送消息
这里写图片描述NSArray *arr = @[p1, p2, p3 ,p4];
//如果使用OC数组存储对象,可以调用OC数组的方法让数组中所有元素都执行指定方法
//注意:如果数组中保存的不是相同类型的数据,没有相同的办法,就会报错
//[arr makeObjectsPerformSelector:@selector(funName)];
[arr makeObjectsPerformSelector:@selector(funName:) withObject:@"blablabla"];
数组排序##
这里写图片描述NSArray *arr = @[@10, @20, @30, @8];
//注意:想使用compare方法对数组中的元素进行排序,那么数组中的元素必须是Foundation框架中的对象
NSArray *newArr = [arr sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"%@", newArr);
这里写图片描述
//自定义类元素成员变量排序·
Person *p1 = [[Person alloc] init];
p1.age = 10;
Person *p2 = [[Person alloc] init];
p2.age = 20;
Person *p3 = [[Person alloc] init];
p3.age = 4;
Person *p4 = [[Person alloc] init];
p4.age = 13;
NSArray *arr = @[p1, p2, p3, p4];
NSArray *newArr = [arr sortedArrayUsingComparator:^NSComparisonResult(Person * _Nonnull obj1, Person * _Nonnull obj2) {
//每次调用该block都会取出数组中的两个元素
//二分
//大于小于号用来调整排序顺序
return obj1.age > obj2.age;
}];
NSLog(@"%@", newArr);
该方法
这里写图片描述
点击回车,block点击回车都会出现代码
这里写图片描述
NSArray和NSString转换##
//将数组中的元素用-连接起来
NSArray *arr = @[@"aa", @"bb", @"cc"];
NSString *str = [arr componentsJoinedByString:@"-"];
NSLog(@"%@", str);
这里写图片描述
这里写图片描述
//通过字符串生成一个数组
NSString *str = @"aa-bb-cc";
NSArray *arr = [str componentsSeparatedByString:@"-"];
NSLog(@"%@", arr);
这里写图片描述
NSArray文件读写##
1.将数组写入文件中
通常保存为.plist文件
这里写图片描述
NSArray *arr = @[@"aa", @"bb", @"cc"];
//1.将数组写入文件中
//数组写入文件其实是一个XML
//在iOS开发中一般情况下将XML保存为.plist
BOOL flag = [arr writeToFile:@"/Users/y1shichanganluan/Desktop/abc.plist" atomically:YES];
2.从文件中读取一个数组
这里写图片描述//2.从文件中读取一个数组
//arrayWithContentsOfFile只能写入数组中保存的Foundation框架中创建的而对象,如果是自定义对象则不能写入
NSArray *arr = [NSArray arrayWithContentsOfFile:@"/Users/y1shichanganluan/Desktop/abc.plist"];
NSLog(@"%@",arr);
NSMutableArray##
1.创建空数组
NSMutableArray *arr = [NSMutableArray array];
2.创建固定长度的空数组
//数组长度为4
NSMutableArray *arr = [[NSMutableArray alloc] initWithCapacity:4]
3.创建数组包含元素,由父类NSArray继承
NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"lalal", @"hahaha", nil];
4.添加
这里写图片描述[arr addObject:@"hehehhe"];
//将数组中的元素取出再添加
[arr addObjectsFromArray:@[@"ajdsfasd", @"asdfsd"]];
5.插入
这里写图片描述NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"lalal", @"hahaha", nil];
[arr addObject:@"hehehhe"];
[arr addObjectsFromArray:@[@"ajdsfasd", @"asdfsd"]];
[arr insertObject:@"sdfasdfasd" atIndex:3];
NSRange range = NSMakeRange(2, 2);
NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:range];
//插入数据,指定数组需要插入的位置,和插入多少个
[arr insertObjects:@[@"sadfs", @"sadfdsf"] atIndexes:set];
NSLog(@"%@", arr);
6.删除
[arr removeObject:(nonnull id)];
[arr removeObjectAtIndex:NSUInteger)];
[arr removeLastObject];
[arr removeObjectsInArray:(nonnull NSArray *)];
[arr removeObjectsAtIndexes:(nonnull NSIndexSet *)]
[arr removeAllObjects];
7.替换
[arr replaceObjectAtIndex:(NSUInteger) withObject:(nonnull id)];
[arr replaceObjectsAtIndexes:(nonnull NSIndexSet *) withObjects:(nonnull NSArray *)];
[arr replaceObjectsInRange:(NSRange) withObjectsFromArray:(nonnull NSArray *)];
[arr replaceObjectsInRange:(NSRange) withObjectsFromArray:(nonnull NSArray *) range:(NSRange)];
//最简单的办法就是用C语言的数组
arr[0] = @"";
8.获取
arr[0];
9.注意
不能通过@[ ]来创建一个可变数组,@[ ]是用来创建一个不可变得数组,强行使用会引发运行错误
网友评论