Foundation框架-02 NSArray

Foundation框架-02 NSArray


1.NSArray基本概念

  • NSArray是OC中的数组类
    • 只能存储OC对象,并且是有序数组
    • 不能存储非OC对象,但是可以将非OC对象转换后存储
    • NSArray是不可变数组,一旦初始化完毕后里面的内容就永远不变,不能往里面添加元素,且不能删除里面的元素

2.NSArray的初始化

//单个元素数组的创建
NSArray *arr = [NSArray arrayWithObject:@"obj1"];
//多个元素的数组的创建,注意数组中的nil是结束符
NSArray *arr = [NSArray arrayWithObjects:@"obj1",@"obj2",@"obj3",nil];
//NSArray可以存储不同的OC对象
NSArray *arr = [NSArray arrayWithObjects:[Person new],[NSObject new],@"obj3",nil];
  • 获取数组的长度: [arr count];
  • 获取数组的元素
    • 获取最后一个元素:[arr lastObject];
    • 获取第一个元素:[arr firstObject];
    • 获取指定位置的元素:[arr objectAtIndex:1];
  • 判断数组中是否包含某个元素:[arr containsObhect:objc];

  • 快速创建数组:NSArray *arr = @[@”obj1”,@”obj2”,@”obj3”];

  • 快速获取数组元素: arr[index];

3.NSArray遍历

  • 建议开发中使用方法三遍历数组
//常规遍历
for(int i = 0;i < arr.count;i++){
    NSLog("arr[%i] = %@",i,arr[i]);
}
//利用增强For循环,obj的类型可以根据数组中的元素的类型来写
for(NSObject *obj in arr){
    NSLog(@"obj = %@",obj);
}
//使用OC数组的迭代器来遍历,没取出一个元素就会调用一次block,每次调用block都会将当前取出的元素和元素对应的索引传递给我们,objc就是当前数组的元素,idx就是当前元素的索引,stop参数用来停止遍历
[arr enumerateObjectUsingBlock:^(id obj,NSUInteger idx,BOOL *stop){
    NSLog(@"obj = %@,idx = %lu",obj,idx);
}]
  • 如果使用OC数组存储对象,可以调用OC数组的方法让数组中所有的元素都执行指定的方法
  • 注意:使用该方法时需要数组中所有的对象都能执行指定的方法
    [arr makeObjectsPerformSelector:SEL];
    //给指定的方法传一个参数
    [arr makeObjectsPerformSelector:SEL withObject:id object];

4.数组排序

//compare:方法只能针对Foundation框架中的OC类进行排序,而不能堆自定义对象排序
NSArray *arr = @[@"10",@"50",@"20",@"30"];
NSArray *newArr = [arr sortedArrayUsingSelector@selector(compare:)];
// 自定义对象排序
NSArray *arr = @[p1,p2,p3,p4];
NSArray *newArr = [arr sortedArrayWithOptions:NSSortStable usingComparator:^NSComparisonResult(Person *obj1, Person *obj2) {
// 每次调用该block都会取出数组中的两个元素给我们
        return obj1.age > obj2.age;//降序排列
//      return obj1.age < obj2.age;//升序排列

5.NSArray和NSString的转换

  • 数组转换为字符串
  //将数组中的元素用aString分隔拼接起来
NSString *str = [arr componentsJoinedByString:(NSString *)aString];
  • 字符串转换为数组
// 将字符串以aString字符分隔后添加到数组
NSArray *arr = [str componentsSeparatedByString:NSString *)aString];

6.NSArray文件读写

  • 将数组写入到文件中
    • BOOL flag = [arr writeToFile:@”/Users/xxx/Desktop/abc.plist” atomically:YES];
    • 如果将一个数组写入到文件中,本质是写入了一个XML文件,在IOS开发中一般情况下我们会讲XML文件的扩展名保存为plist
    • 注意:writeToFile只能写入数组中保存的元素都是Foundation框架中的类的时候,不能写入自已定类
  • 从文件中读取一个数组
    • NSArray *newArray = [NSArray arrayWithContentsOfFile:@”/Users/xxx/Desktop/abc.plist”];

7.NSMutableArray

  • NSMutableArray是NSArray的子类,是可变数组,和NSMutableString类似,可以动态的改变数组中的内容
  • 增:
    • [arrM addObject:id object];
    • [arrM addObjectsFromArray:(NSArray *)array];//将指定数组中的元素都取出来,放到arrM中,并不是将整个数组作为一个元素添加到arrM中
  • 插:
    • [arrM insertObject:@”test1” atIndex:1];
    • [arrM insertObjects:@[@”test2”,@”test3”]] atIndexes:[NSIndexSet indexSetWuthIndexsInRange:NSMakeRange(2,2)];//插入一组数据,指定需要插入的位置和插入的数量
  • 删:
    • [arrM removeObjectAtIndex:0];
    • [arrM removeLastObject];
    • [arrM removeObject:@”test1”];
  • 改:[arrM replaceObjectAtIndex:1 withObject:@”test1”];//arrM[1] = @”test1”;
  • 查:[arrM objectAtIndex:0];//arrM[index];

  • 注意:不能通过快速创建数组的方式创建可变数组,因为@[]创建出来的是一个不可变的数组,如果把一个不可变数组当作可变数组来使用,会引发一个运行时的错误

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值