黑马程序员--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、替换元素
5、互换两个元素的位置
//互换两个元素的位置 [mArray2 exchangeObjectAtIndex:0 withObjectAtIndex:3];
6、删除方法
//删除指定位置的元素 [mArray2 removeObjectAtIndex:0]; //删除最后一个元素 [mArray2 removeLastObject]; //删除指定的对象 [mArray2 removeObject:@"lisi"]; //删除所有的对象/清空列表 [mArray2 removeAllObjects];