zoukankan      html  css  js  c++  java
  • 【转】不可变数组NSArray与可变数组NSMutableArray

    原文网址:http://www.jianshu.com/p/1ad327f56d1d

    不可变数组NSArray

        //创建一个空数组
        NSArray *array = [NSArray array];
        //这样创建是没有意义的.
    
        //创建只有一个元素的数组
        NSArray *array1 = [NSArray arrayWithArray:@"a"];
        NSArray *array2 = [NSArray arrayWithObject:@"b"];
    
        //使用便利构造器创建有多个元素数组
        NSArray *array3 = [NSArray arrayWithObjects:@"Hola",@"Bonjour",@"Guten",@"Tag", nil]; //注意最后有nil
    
        //创建数组,有多个元素 使用对象方法
        NSArray *array4 = [[NSArray alloc] initWithObjects:@"1",@"2",@"3", @"4",nil];
        //用一个数组创建另一个数组
        NSArray *array5 = [NSArray arrayWithArray:array3];
    
        //在控制台打印数组中的所有对象 使用数组名
        NSLog(@"%@",array5);
    
        //在控制台打印数组中的某个对象 使用数组名 + 下标法
        NSLog(@"%@",array5[0]);

    一些常用用法:

        NSArray *array = [NSArray arrayWithObjects:@"Hola",@"Guten",@"Tag",@"Bonjour", nil];
        //1.获取数组的元素个数 使用count
        NSLog(@"%ld",[array count]);
    
        //2.根据下标获取下标对应的对象
        NSLog(@"%@",[array objectAtIndex:2]);  // 此处[]不能用.代替
    
        //3.通过元素找下标
        NSUInteger r = [array indexOfObject:@"three"];
        NSLog(@"%ld",r);
    
        //4.判断数组中是否包含了某个元素
        BOOL r1 = [array containsObject:@"one"];
         if (r1) {
             NSLog(@"包含这个元素!");
         }else{
             NSLog(@"没找着!");
         }

    简化的创建方式 (语法糖):

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

    简化的访问方式(通过元素下标来访问)

        NSString *str = array[2];
        NSLog(@"%@",str);

    数组遍历:

        //第一种方式: 普通遍历 -- 通过下表访问
        for (int i = 0; i < array.count; i++) {
            NSLog(@"%@",array[i]);
        }
    
        //第二种方式: 快速枚举法--for循环的增强版
        for (NSString *obj in array) {
            NSLog(@"%@",obj);
        }
    
        //第三种方式: 使用block进行遍历
        [array enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            if (idx == 2) {     //idx是下标
                *stop = YES;
            }else{
            NSLog(@"下标为:%ld 对象为%@",idx,obj);
            }
        }];

    可变数组NSMutableArray

    可变数组NSMutableArray 继承于 不可变数组NSArray

        //1.创建一个空数组
             NSMutableArray *array =[NSMutableArray array];
        //2.维数组追加元素
            [array addObject:@1];
        //3.创建数组,添加多个元素
            NSMutableArray *array2 = [NSMutableArray arrayWithCapacity:5];
        //添加5个元素
            [array2 addObject:@1];
            array2[1] = @2;
            array2[2] = @3;
            array2[3] = @4;
            array2[4] = @5;
        //输出数组
            NSLog(@"%@",array2);

    可变数组有而不可变数组没有的一些操作:

        //插入 insert
            [array2 insertObject:@6 atIndex:0];
            NSLog(@"%@",array2);
        //替换  replace
            [array2 replaceObjectAtIndex:0 withObject:@0];
            NSLog(@"%@",array2);
        //删除 remove
            [array2 removeLastObject];
            NSLog(@"%@",array2);
        //是否包含 contain
            BOOL r = [array2 containsObject:@2];   //此方法有返回值
            if (r) {
                NSLog(@"包含!");
            } else {
                NSLog(@"不包含!");
            }
        //交换元素  exchange
            [array2 exchangeObjectAtIndex:0 withObjectAtIndex:2];
            NSLog(@"%@",array2);

    一个典型的错误用法:

    //        NSMutableArray *array =@[@1,@2,@3,@4,@5];
    //        [array addObject:@"hello"];
    //        NSLog(@"%@",array3);

    注: 语法糖是为不可变对象设立的,如果创建可变对象时,使用语法糖,会报黄,创建之后,再为此空间添加对象,程序会抛出异常,因为在运行时,默认是不可变的数组.



    文/请叫我大圣(简书作者)
    原文链接:http://www.jianshu.com/p/1ad327f56d1d
    著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
  • 相关阅读:
    牛客网暑期ACM多校训练营(第一场)
    ACM-ICPC-Swiss-Subregional 2017 训练日志
    2016 全国多校第二场 训练日志
    2018湖南多校第八场 训练日志
    2017 全国多校第九场 训练日志
    2017 全国多校第十场 训练日志
    2014 Kuala Lumpur 训练日志
    2018湖南多校第五场-20180506 训练日志
    2017icpc 花莲训练日志
    面试总结
  • 原文地址:https://www.cnblogs.com/wi100sh/p/5731684.html
Copyright © 2011-2022 走看看