黑马程序员——Foundation框架——NSArray和NSMutableArray的介绍及使用

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、NSArray的基本介绍

(一)NSArray是OC中的数组类, 开发中建议尽量使用NSArray替代C语言中的数组

C语言中数组的弊端 :

int array[4] = {10, 89, 27, 76}; 

只能存放一种类型的数据.(类型必须一致) ,不能很方便地动态添加数组元素、不能很方便地动态删除数组元素(长度固定) 。

(二)NSArray的使用注意

只能存放任意OC对象, 并且是有顺序的
不能存储非OC对象, 比如int\float\double\char\enum\struct等
它是不可变的, 一旦初始化完毕后, 它里面的内容就永远是固定的,不能删除里面的元素, 也不能再往里面添加元素、

二、NSArray的创建方式

(一)NSArray的类方法创建

+ (instancetype)array;

+(instancetype)arrayWithObject:(id)anObject;

+ (instancetype)arrayWithObjects:(id)firstObj,...;

+(instancetype)arrayWithObjects:(id)firstObj, ...;

+ (instancetype)arrayWithArray:(NSArray*)array;

+ (id)arrayWithContentsOfFile:(NSString*)path; // 读取一个xml文件. + (id)arrayWithContentsOfURL:(NSURL *)url; // 读取一个xml文件.

(二)使用NSArray的对象方法创建

(三)使用已经存在数组创建新的数组

//1)创建一个空数组
        NSArray *arr1 = [NSArray array];
        //2)创建数组,只有一个元素
        NSArray *arr2 = [NSArray arrayWithObject:@"1"]; 
        //3)创建数组,有多个元素
        // nil 表示数组赋值结束
        // 常见写法
        NSArray *arr3 = [NSArray arrayWithObjects:@"one",@"two",@1, nil];
                        NSLog(@"arr3 = %@",arr3);
        //4)调用对象方法,创建数组
        //nil Nil NULL  NSNULL
        NSArray *arr4 = [[NSArray alloc] initWithObjects:@"three",[NSNull null],@"four", nil];
                        NSLog(@"arr4 = %@",arr4);
        //5)用一个数组可以创建另外一个数组
        NSArray *arr5 = [NSArray arrayWithArray:arr3];
                        NSLog(@"arr5 = %@",arr5);

三、NSArray的使用注意

(1)NSArray直接使用NSLog()作为字符串输出时是小括号括起来的形式。 NSArray中不能存储nil,因为NSArray认为nil是数组的结束(nil是数组元素结束的标记)。nil 就是0。0也是基本数据类型,不能存放到NSArray中。

(2)NSArray *array = [NSArray array]; // 这样的数组永远是空的,不可能向其中增加值。

四、NSArray 的常见用法

- (NSUInteger)count; 获取集合元素个数

- (id)objectAtIndex:(NSUInteger)index; 获得index位置的元素

- (BOOL)containsObject:(id)anObject;是否包含某一个元素

- (id)lastObject; 返回最后一个元素

- (id)firstObject; 返回最后一个元素

- (NSUInteger)indexOfObject:(id)anObject; 查找anObject元素在数组中的位置(如果找不到,返回-1)NSNotFound

- (NSUInteger)indexOfObject:(id)anObjectinRange:(NSRange)range; 在range范围内查找anObject元素在数组中的位置

NSArray *arr3 = [NSArray arrayWithObjects:@"one",@"two",@1,@"three", nil];
    NSLog(@"arr3 = %@",arr3);
    //1)获取数组的长度  count获取数组的元素的个数
    NSLog(@"%ld",arr3.count);
    //2)根据下标,获取下标对应的对象
    NSLog(@"%@",[arr3 objectAtIndex:3]);
    //3)返回元素的下标
    NSUInteger loc = [arr3 indexOfObject:@"three"];
    NSLog(@"%ld",loc);
    //4)数组中是否包含了某个元素
    if([arr3 containsObject:@"four"]){
        NSLog(@"包含此元素");
    }else{
        NSLog(@"不包含");
    }

五、NSArray 的遍历方法

(一)NSArray的下标遍历

(二)NSArray的快速遍历(增强for循环)

(三)NSArray使用block遍历

#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //定义一个数组
        NSArray *arr = @[@"one",@"two",@"three",@"four"];
        //对数组进行遍历
        //1) 普通的方式,通过下标访问
        for (int i=0; i<arr.count; i++) {
            NSLog(@"-> %@",arr[i]);
        }
        //2) 快速枚举法 for循环的增强形式
        for (NSString * str in arr) {
             NSLog(@"---> %@",str);
        }
        //3) 使用block的方式,进行访问
        //                               数组元素            元素下标     是否停止
        //stop:YES 会停止, stop:NO 不会停止
        [arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
            if(idx == 2){
                *stop = YES;  //停止  // break;
            }else{
               NSLog(@"idx = %ld,obj = %@",idx,obj);
            }
        }];
    }
    return 0;
}

六、NSArray 读写文件

(一)NSArray数据写入到文件中

      

  NSArray *array = [NSArray arrayWithObjects:@"one",@"zbz",@"cgx",@"sb",@"cjk",@"senni", nil];
        //把NSArray 中的内容,写入到文件中
        //arr.plist 一种特殊的文件格式
        BOOL isWrite = [array writeToFile:@"/Users/zhaoxiaohu/Desktop/arr.xml" atomically:YES];
        if(isWrite){
            NSLog(@"写入成功");
        }

(二)从文件读取数据到NSArray中

//从文件中,读取一个数组信息
        NSArray *readArr = [NSArray arrayWithContentsOfFile:@"/Users/zhaoxiaohu/Desktop/arr.xml"];   
        NSLog(@"readArr = %@",readArr); 

七、数组和字符串

(一)把数组元素链接成字符串

//定义一个数组
        NSArray *arr = @[@1,@2,@3,@4];
        //1)需求: 把数组中的元素用 "-" 连接起来
        //  [数组 componentsJoinedByString@"分隔符"];
        // 1-2-3-4
        NSString *str = [arr componentsJoinedByString:@"-"];
        NSLog(@"str = %@",str);

(二)字符串分割

//2) 给一个字符串,分割成一个数组
        // 400-800-12580   //取得 400   12580    800
        NSString *str2 = @"400-800-12580";
        NSArray *arr2 = [str2 componentsSeparatedByString:@"-"];
        NSLog(@"%@",[arr2 firstObject]);
        NSLog(@"%@",[arr2 lastObject]);
        NSLog(@"%@",arr2[1]);
       
        //
        str2 = @"400-800-12580#400-888-11200";
        NSArray *arr3 = [str2 componentsSeparatedByString:@"#"];
        NSLog(@"arr3 = %@",arr3);
       
        //第一个电话的每一部分
        NSArray *arr4 = [[arr3 firstObject] componentsSeparatedByString:@"-"];
        NSLog(@"arr4 = %@",arr4);
       
        NSArray *arr5 = [[arr3 lastObject] componentsSeparatedByString:@"-"];
        NSLog(@"arr5 = %@",arr5);

八、NSMutableArray介绍及使用

(一)NSMutableArray介绍

NSMutableArray是NSArray的子类

NSArray是不可变的, 一旦初始化完毕后, 它里面的内容就永远是固定的,不能删除里面的元素, 也不能再往里面添加元素

NSMutableArray是可变的, 随时可以往里面添加\更改\删除元素 // 创建一个空的NSMutableArray

NSMutableArray *array = [NSMutableArrayarray];

(二)NSMutableArray基本使用方法

#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {       
        //数组的使用
        //1)创建数组
         //i. 空数组
        NSMutableArray *arr1 = [NSMutableArray array];
        NSLog(@"%p",arr1);
         //ii.创建的时候初始化一个元素
        NSMutableArray *arr2 = [NSMutableArray arrayWithObject:@"one"];  
         //iii.创建数组的时候,初始化多个元素
        NSMutableArray *arr3 = [NSMutableArray arrayWithObjects:@"one",@"two",@3,nil];
         //IV . 创建一个数组,并且指定长度,
        NSMutableArray *arr4 = [NSMutableArray arrayWithCapacity:5];
        //2) 添加元素
        [arr1 addObject:@"fengjie"];
         NSLog(@"%p",arr1);
        //插入元素到指定的位置
        [arr1 insertObject:@"zbz" atIndex:0];
        //3) 删除元素
        //根据对象内容删除
        [arr1 removeObject:@"zbz"];
        //根据位置删除
        [arr1 removeObjectAtIndex:1];
        //全部删除
        [arr1 removeAllObjects];
        //4) 修改元素
        //two --> four
        [arr3 replaceObjectAtIndex:1 withObject:@"four"];
        //four --> five
        //更加简单地方法
        arr3[1] = @"five";
        NSLog(@"%@",arr3);
        //5) 查找元素
        BOOL isSearch = [arr3 containsObject:@"four"];
        NSLog(@"%d",isSearch);
        //6) 交换元素
        // 1  2   3   4   5
        // 5  2   3   4   1
        //temp = a[0];
        //a[0] = a[len-1];
        //a[len-1] = temp;
        NSMutableArray *arr5 =[NSMutableArray arrayWithObjects:@1,@2,@3,@4,@5, nil];
        // 可以交换数组元素
        [arr5 exchangeObjectAtIndex:0 withObjectAtIndex:4];
        NSLog(@"%@",arr5); 
    }
    return 0;
}

(三)NSMutableArray 错误用法

NSMutableArray *array = @[@"bob",@"steve", @"john"];
[array addObject:@“Peter”];// 错误,使用@[@"bob",@"steve", @"john"]这种方式创建的永 远是NSArray(不可变数组)
// 正确
NSMutableArray *array = [NSMutableArrayarrayWithArray:@[@"bob", @"steve", @"john"]];[array addObject:@"Peter"];


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值