NSArray

使用注意

  • 只能存放任意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.注意
不能通过@[ ]来创建一个可变数组,@[ ]是用来创建一个不可变得数组,强行使用会引发运行错误
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值