黑马程序员--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]; 
posted on 2015-04-02 00:46  waterfoxjie  阅读(309)  评论(0编辑  收藏  举报