GeniusWarrior
雨停了,天晴了,感觉自己又行了

 

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

 

posted on 2015-08-13 16:36  GeniusWarrior  阅读(330)  评论(0编辑  收藏  举报