NSArray和NSMutableArray的介绍和用法

一、NSArray
1、C语言中的数组

1)回顾C语言中的数组使用方法
int a[5]={1,2}; int *pa[3];

2、NSArray的基本介绍

1)什么是NSArray?
NSArray是OC中的数组类, 开发中建议尽量使用NSArray替代C语言中的数组 C语言中数组的弊端
int array[4] = {10, 89, 27, 76}; 只能存放一种类型的数据.(类型必须一致) 不能很方便地动态添加数组元素、不能很方便地动态删除数组元素(长度固定)
2)NSArray的使用注意
         1),NSArray是OC中的数组类, 开发中建议尽量使用NSArray替代C语言中的数组;
        2),只能存放任意OC对象, 并且下标都是有顺序的;
        3),不能存储非OC对象, 比如int\float\double\char\enum\struct等;
        4),它是不可变的, 一旦初始化完毕后, 它里面的内容就永远是固定的,不能删除里面的元素,也不能再往里面添加元素;
        5),不能存放nil值,可以存放NSNull对象;例如:[NSNull null];

3、NSArray的创建方式

    1),类方法创建
            + (instancetype)array;
            + (instancetype)arrayWithObject:(id)anObject;
            + (instancetype)arrayWithObjects:(id)firstObj, ...;
            + (instancetype)arrayWithArray:(NSArray *)array;
            + (id)arrayWithContentsOfFile:(NSString *)path;
            + (id)arrayWithContentsOfURL:(NSURL *)url;


    2),对象方法创建
            - (instancetype)initWithObjects:(id)firstObj, ;
            - (instancetype)initWithArray:(NSArray *)array;
            - (NSArray *)initWithContentsOfFile:(NSString *)path;
            - (NSArray *)initWithContentsOfURL:(NSURL *)url;

3、常见用法

            - (NSUInteger)count; 获取集合元素个数
            - (id)objectAtIndex:(NSUInteger)index; 获得index位置的元素
            - (BOOL)containsObject:(id)anObject;是否包含某一个元素
            - (id)lastObject; 获取最后一个元素
            - (id)firstObject; 获取第一个元素
            - (NSUInteger)indexOfObject:(id)anObject; 查找anObject元素在数组中的位置

4、NSArra的字面量写法

  NSArray *arr = @[@"Jack", @"Rose", @"Jim"];
        格式:
            NSArray *arr = @[数组元素];

        获取元素格式:
            arr[元素角标index];
            NSString *str =  arr[0];//获取第零个元素

5、NSArray的遍历

 NSArray *arr = @[@"one",@"two",@"three",@"four"];

        1),普通for循环,通过下标访问
            for (int i=0; i<arr.count; i++) {
                    NSLog(@"-> %@",arr[i]);
                }

        2),增强for循环  (for in)
            for (NSString * str in arr) {
                NSLog(@"---> %@",str);
            }

        3),使用block的方式,进行遍历
            //block的三个参数含义:   1,数组元素   2,元素下标  3,是否停止
            [arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

                if(idx == 2){

                    *stop = YES;  //停止  // break;

                }else{

                    NSLog(@"idx = %ld,obj = %@",idx,obj);
                }


            }];

6、NSArray读写文件

 1),将数组元素写入文件
           - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;

        代码:
        NSArray *arr = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5", nil];
        //写入数据到plist文件中
        if([arr writeToFile:@"/Users/liwei/Desktop/arr.plist" atomically:YES]){
            NSLog(@"写入成功!");
        }


        2),从文件读取数组
            + (NSArray *)arrayWithContentsOfFile:(NSString *)path;

        代码:
            NSArray *readArr = [NSArray arrayWithContentsOfFile:@"/Users/zhaoxiaohu/Desktop/arr.xml"];

6、NSArray 与字符串

        1),把数组元素链接成字符串(NSArray的方法)
            - (NSString *)componentsJoinedByString:(NSString *)separator;
            这是NSArray的方法, 用separator作拼接符将数组元素拼接成一个字符串


        2),字符串分割方法(NSString的方法)
            NSString *str =@"400-588-1688";
            NSArray *arr = [str componentsSeparatedByString:@"-"];

二、NSMutableArray

        1),创建数组
            //创建空数组
            NSMutableArray *arr = [NSMutableArray array];
            //创建数组,并且指定长度为5,此时也是空数组
            NSMutableArray *arr2 = [[NSMutableArray alloc] initWithCapacity:5];
            //创建一个数组,包含两个元素
            NSMutableArray *arr3 = [NSMutableArray arrayWithObjects:@"1",@"2", nil];
            //调用对象方法创建数组
            NSMutableArray *arr4 = [[NSMutableArray alloc] initWithObjects:@"1",@"2", nil];


        2),添加元素
            - (void)addObject:(id)object; 添加一个元素

        3),插入元素
            - (void)insertObject:(id)anObject atIndex:(NSUInteger)index;

        4),删除元素
            - (void)removeAllObjects;//删除全部
            - (void)removeLastObject;//删除最后一个
            - (void)removeObjectAtIndex:(NSUInteger)index;//删除指定位置
            - (void)removeObject:(id)anObject;//删除指定元素

        5),修改元素
            - (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject;

        6),查找元素
            - (BOOL)containsObject:(id)anObject;


        7),交换元素
            交换idx1和idx2位置的元素
            - (void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2;


    3,NSMutableArray 错误用法
        NSMutableArray *array = @[@"bob", @"steve", @"john"];//这句话报警告
        使用@[@"bob", @"steve", @"john"]这种方式创建的永远是NSArray(不可变数组);

    正确用法:
        NSMutableArray *array = [NSMutableArray arrayWithArray:@[@"bob", @"steve", @"john"]];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值