zoukankan      html  css  js  c++  java
  • 黑马程序员--Foundation框架之--NSArray类以及它的子类NSMutableArray类

     

    ------IOS培训期待与您交流! -------

     

    今天我们继续来看一下Foundation框架中的NSArray类和 NSMutableArray类,NSArray类 是不可变的,NSMutableArray类是可变的。

    一、NSArray类

    NSArray中不可以存放基本数据类型,只能存放类的实例,如果需要将基本类型、结构体放入到数组中得话,需要通过NSNumber/NSValue进行数据的封装

    同时不能在NSArray中存储nil

        //  
        //  main.m  
        //  16_NSArray  
        //  
        //  Created by waterfoxjie on 15-04-01.  
        //  Copyright (c) 2015年 waterfoxjie. All rights reserved.  
        //  
          
        #import <Foundation/Foundation.h>  
        
        int main(int argc, const charchar * argv[]) {  
            @autoreleasepool { 
    // 数组的创建 方式一: NSString *s1 = @"zjsj"; NSString *s2 = @"xiaohong"; NSString *s3 = @"jiajia";
    // 方式二:最后的nil相当于结束的标记 NSArray *array1 = [[NSArray alloc] initWithObjects:s1,s2,s3, nil nil];
    NSLog(@"%@",array1); // 方式三:使用类方法创建 array1 = [NSArray arrayWithObjects:s1,s2,s3, nil nil]; // 方式四:创建一个数组,将源数组中的数据拿出来放进去 NSArray *array2 = [NSArray arrayWithArray:array1]; // 访问数组中的数据,数组中存放的是对象的指针 NSString *str1 = [array1 objectAtIndex:0]; // 获取数组元素中的个数 NSUInteger count = [array1 count];// 判断数组中是否包含某一个对象,判断的是指针对象值,不是对象中的值 BOOL isContains = [array1 containsObject:@"zhangsan"]; // 返回一个对象在数组中的下标值 NSUInteger index = [array1 indexOfObject:@"zhangsan"]; if(index == NSNotFound){ // 没有找到 }else{ // 找到了 } // 数组中存放的如果是字符串的话,可以使用连接符将其所有的元素进行连接 NSString *content = [array1 componentsJoinedByString:@","]; // 访问数组最后一个元素 NSString *lastObj = [array1 lastObject]; // 在原来的数组后面追加元素,返回一个新的数组对象,因为他是不可变的 NSArray *array3 = [array1 arrayByAddingObject:@"zhaoliu"]; // 数组的遍历 方式一: for(int i=0;i<array1.count;i++){ NSString *str = [array1 objectAtIndex:i]; NSLog(@"%@",str); } // 方式二:快速遍历 for(NSString *s in array1){ NSLog(@"%@",s); } } return 0; }

    下面来看仔细一下这些操作方法:

    1、NSArray的创建

     

    // 数组的创建  方式一:  
    NSString *s1 = @"zjsj";
    NSString *s2 = @"xiaohong";
    NSString *s3 = @"jiajia";

    // 方式二:最后的nil相当于结束的标记
    NSArray *array1 = [[NSArray alloc] initWithObjects:s1,s2,s3, nil nil];

    我们看到他的initWithObjects方法的最后一个值为nil,这个我们在之前说到过这个值,他是空指针的意思,这里的NSArray的最后一个元素为nil,是用于标记NSArray结束

    当然还有其他的方式可以创建数组:

    // 方式三:使用类方法创建  
    array1 = [NSArray arrayWithObjects:s1,s2,s3, nil nil];
    // 方式四:创建一个数组,将源数组中的数据拿出来放进去 NSArray *array2 = [NSArray arrayWithArray:array1];


    2、使用下标访问元素

     

    // 访问数组中的数据,数组中存放的是对象的指针  
    NSString *str1 = [array1 objectAtIndex:0];  

    3、获取数组的大小

     // 获取数组元素中的个数  
    NSUInteger count = [array1 count]; 

     

    NSUInteger是无符号的int类型

     

    4、是否包含某一个元素

     

    // 判断数组中是否包含某一个对象,判断的是指针对象值,不是对象中的值  
    BOOL isContains = [array1 containsObject:@"zhangsan"];  
    

    5、找到一个元素在数组中的下标

     

    // 返回一个对象在数组中的下标值  
    NSUInteger index = [array1 indexOfObject:@"zhangsan"];  
    if(index == NSNotFound){  
          // 没有找到  
          }else{  
          // 找到了  
    }  

     

    6、使用指定的连接符连接数组中所有的元素

     

    // 数组中存放的如果是字符串的话,可以使用连接符将其所有的元素进行连接  
    NSString *content = [array1 componentsJoinedByString:@","]; 

    7、在数组的尾部增加一个元素

     

    // 在原来的数组后面追加元素,返回一个新的数组对象,因为他是不可变的  
    NSArray *array3 = [array1 arrayByAddingObject:@"zhaoliu"]; 

     

    8、数组的遍历

     

        // 数组的遍历  方式一:
        for(int i=0;i<array1.count;i++){  
            NSString *str = [array1 objectAtIndex:i];  
            NSLog(@"%@",str);  
        }  
          
        // 方式二:快速遍历  
        for(NSString *s in array1){  
            NSLog(@"%@",s);  
        }  

     

    二、NSMutableArray类

    NSArray类是不可变的,NSMutableArray类是可变的,可变类一样的特性,就是可以进行增删改查操作,NSMutableArray继承NSArray类,有NSArray中的所有方法

     

        //  
        //  main.m  
        //  17_NSMutableArray  
        //  
        //  Created by waterfoxjie on 15-04-01.  
        //  Copyright (c) 2015年 waterfoxjie. All rights reserved.  
        //  
          
        #import <Foundation/Foundation.h>  
          
        int main(int argc, const charchar * argv[]) {  
            @autoreleasepool {  
                // 创建可变数组  
                NSString *str1 = @"zhangsan";  
                NSString *str2 = @"lisi";  
                NSString *str3 = @"wangwu";  
                NSMutableArray *mArray1 = [[NSMutableArray alloc] initWithObjects:str1,str2,str3, nil nil];  // 先开辟5个空间,用于存储元素,当存储的元素超过了5个,数组会自动增大空间  
                NSMutableArray *mArray2 = [[NSMutableArray alloc] initWithCapacity:5];  
                

    // 使用类方法创建 NSMutableArray *mArray3 = [NSMutableArray arrayWithCapacity:5]; //添加元素的方法 [mArray1 addObject:str1]; [mArray1 addObject:str2];
    //添加数组,把mArray1中的所有元素全部添加到mArray2中 [mArray2 addObjectsFromArray:mArray1]; NSLog(@"mArray3 = %@",mArray2); //在指定的位置上插入特定元素 [mArray2 insertObject:@"def" atIndex:0]; //替换元素 [mArray2 replaceObjectAtIndex:0 withObject:@"aaa"]; //互换两个元素的位置 [mArray2 exchangeObjectAtIndex:0 withObjectAtIndex:3]; //删除指定位置的元素 [mArray2 removeObjectAtIndex:0];
    //删除最后一个元素 [mArray2 removeLastObject];
    //删除指定的对象 [mArray2 removeObject:@"lisi"];
    //删除所有的对象/清空列表 [mArray2 removeAllObjects]; } return 0; }


    1、创建方法

     

        // 创建可变数组  
        NSString *str1 = @"zhangsan";  
        NSString *str2 = @"lisi";  
        NSString *str3 = @"wangwu";  
        NSMutableArray *mArray1 = [[NSMutableArray alloc] initWithObjects:str1,str2,str3, nil nil];  
        //先开辟5个空间,用于存储元素,当存储的元素超过了5个,数组会自动增大空间  
        NSMutableArray *mArray2 = [[NSMutableArray alloc] initWithCapacity:5];  
        
    //使用类方法创建 NSMutableArray *mArray3 = [NSMutableArray arrayWithCapacity:5];

    创建方式和NSArray类似,但是有一种方式不能用,就是直接创建的方式,那个只能用于创建不变数组。

    但是可变数组还有一个方法就是能够事先的设置数组的大小,而且超过这个大小之后,数组会自动扩充,类似于C语言中的动态数组的实现。

     

    2、添加元素

     

    // 添加元素的方法  
    [mArray1 addObject:str1];  
    [mArray1 addObject:str2];  
    // 添加数组,把mArray1中的所有元素全部添加到mArray2中  
    [mArray2 addObjectsFromArray:mArray1];  
    NSLog(@"mArray3 = %@",mArray2);  
    

     

    3、在数组的指定位置上插入元素

     

    // 在指定的位置上插入特定元素  
    [mArray2 insertObject:@"def" atIndex:0];

    4、替换元素

     

    //替换元素  
    [mArray2 replaceObjectAtIndex:0 withObject:@"aaa"];


    5、互换两个元素的位置

    //互换两个元素的位置  
    [mArray2 exchangeObjectAtIndex:0 withObjectAtIndex:3];  


    6、删除方法

    //删除指定位置的元素  
    [mArray2 removeObjectAtIndex:0];  
    
    //删除最后一个元素  
    [mArray2 removeLastObject];  
    
    //删除指定的对象  
    [mArray2 removeObject:@"lisi"];  
    
    //删除所有的对象/清空列表  
    [mArray2 removeAllObjects]; 
  • 相关阅读:
    HTTP协议详解
    【VC++开发实战】迅雷晒密及批量查询流量程序
    C/C++中指针和引用之相关问题研究
    C++类中拷贝构造函数详解
    构造函数为什么不能是虚函数
    High一下!
    文件搜索神器everything 你不知道的技巧总结
    不要被C++“自动生成”所蒙骗
    对象的传值与返回
    深入浅出Node.js (3)
  • 原文地址:https://www.cnblogs.com/waterfox/p/4385772.html
Copyright © 2011-2022 走看看