zoukankan      html  css  js  c++  java
  • Obbjective-C-Foundation框架中的NSArray与NSMutableArray的用法-

        ------------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;

     
            //NSArray特点:
            // 一旦创建成功,内容不可改变
            // 只能存放OC对象
            
            //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);
            
    

            3),常见用法

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

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

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

                - (id)lastObject; 获取最后一个元素

                - (id)firstObject; 获取第一个元素

                - (NSUInteger)indexOfObject:(id)anObject; 查找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 *arr = @[@"Jack", @"Rose", @"Jim"];

            格式:

                NSArray *arr = @[数组元素];

                NSArray *arr = @[@"1",@"one",@"3",@4,@"ONE"];

                NSLog(@"arr = %@",arr);

             获取元素格式:

                arr[元素角标index];

                NSString *str =  arr[0];//获取第零个元素

                 NSString *str =[arr objectAtIndex:2];

                NSLog(@"%@",str);

                //2)用简化的方式访问数组元素

                str = arr[1];   //C语言形式的数组元素访问

                NSLog(@"%@",str);

    -------------------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);
    
                    }
    }];
    
     
    

    --------------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"];
    

       ---------------------NSArray 与字符串

            1),把数组元素链接成字符串(NSArray的方法)

                - (NSString *)componentsJoinedByString:(NSString *)separator;

                这是NSArray的方法, 用separator作拼接符将数组元素拼接成一个字符串

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

            2),字符串分割方法(NSString的方法)

     //定义一个数组
            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--------------------

        1,NSMutableArray介绍

            1),NSMutableArray是NSArray的子类

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

            3),NSMutableArray是可变的, 随时可以往里面添加更改删除元素

         2,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; 添加一个元素

                    [arr1 addObject:@"fengjie"];
    
                   NSLog(@"%p",arr1);
    
     
    

            3),插入元素

                - (void)insertObject:(id)anObject atIndex:(NSUInteger)index;

              [arr1 insertObject:@"zbz" atIndex:0];
    
     
    

            4),删除元素

                - (void)removeAllObjects;//删除全部

                - (void)removeLastObject;//删除最后一个

                - (void)removeObjectAtIndex:(NSUInteger)index;//删除指定位置

                - (void)removeObject:(id)anObject;//删除指定元素

                //根据对象内容删除
    
                //        [arr1 removeObject:@"zbz"];
    
                //根据位置删除
    
                //        [arr1 removeObjectAtIndex:1];
    
                //全部删除
    
                [arr1 removeAllObjects];
    

     5),修改元素

                - (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject;

               

                [arr3 replaceObjectAtIndex:1 withObject:@"four"];
    //把下标为一的元素改为four
                
    
                //更加简单地方法
    
                arr3[1] = @"five";
    
                NSLog(@"%@",arr3);
    
     
    

            6),查找元素

                - (BOOL)containsObject:(id)anObject;

    //       查看数组arr3中有没有four这个元素 
    //    BOOL isSearch = [arr3 containsObject:@"four"];
    
    //            NSLog(@"%d",isSearch);
    

            7),交换元素

                交换idx1和idx2位置的元素

                - (void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2;

             

       NSMutableArray *arr5 =[NSMutableArray arrayWithObjects:@1,@2,@3,@4,@5, nil];
    
                // 可以交换数组元素
    //下标0的元素与下标四的元素交换
                [arr5 exchangeObjectAtIndex:0 withObjectAtIndex:4];
    
                NSLog(@"%@",arr5);
    

         -----------------NSMutableArray 错误用法

            NSMutableArray *array = @[@"bob", @"steve", @"john"];//这句话报警告

            使用@[@"bob", @"steve", @"john"]这种方式创建的永远是NSArray(不可变数组);

        正确用法:

            NSMutableArray *array = [NSMutableArray arrayWithArray:@[@"bob", @"steve", @"john"]];

  • 相关阅读:
    查看JVM使用的默认的垃圾收集器
    生产环境mysql的参数设置不一样,好好的程序,又出错
    伤秦姝行
    《道德经》全文——马王堆出土帛书版
    100篇锻炼口才表达能力的绕口令
    《道德经》部分
    40篇英语短文搞定3500个单词
    python浮点数与整数间的转化
    理解微积分
    matlab判断某个变量是否存在
  • 原文地址:https://www.cnblogs.com/yilizhijiaotianxiashao-yincaiersanshijianduo/p/4727717.html
Copyright © 2011-2022 走看看