标签:
在学习 Objective-C的过程中,感觉数组在这一个学习方面是一个比较大的应用域,所以写这篇随笔来总结一下。
首先声明的是,与C语言的数组不同,Objective-C的是数组只能用来存储对象,而不是存储int 、double、char等基础数据类型,一般要存这些基础数据类型,对于我这个刚学 Objective-C的新手来说,我的做法是将有关数字的基础类型 如 int 、double、char首先转换成一个叫做 NSNumber的类 char*类型的转换成 Objective-C的字符串 NSString 类来进行储存,相关 NSNumber 和 NSString 在以后我学习到的时候会来总结一下我的学习成果。
Objective-C的数组分为两种,一种叫做不可变数组(NSArray),一种叫做可变数组(NSMutableArray),NSMutableArray类是NSArray类的一个子类。
(1)不可变数组(NSArray) ---------该类型在确定之后,不能进行数组元素的更改以及交换
//初始化------(两种方式)
NSArray * array =[ [NSArray alloc] initWithObjects:@"abc",@"123",@"ABC", nil];
NSArray * array = @[@"abc",@"123",@"ABC"]; //后来看到老师定义数组的时候用这种方式进行的初始化,所以也记录了下来
(2)可变数组(NSMutableArray)-------该类型在确定之后,可以进行元素的增、删、改(包括元素的位置 以及 数组的元素个数)
//初始化------(两种方式)
NSMutableArray * mutableArray = [[NSMutableArray alloc] init];
NSMutableArray * mutableArray = [NSMutableArray array]; //教我的老师演示时的初始化,两种初始化有没有区别,或者不同,现在先不讨论
//增加元素
对于可变数组,苹果给我们提供了很多方法,因为新手的原因,我基本也使用了其中的一种
[mutableArray addObject:(id)]; //这是mutableArray 对象调用增加元素的一个方法
例如:[mutableArray addObject:@"EFG"]; //这是在mutableArray 对象中添加了一个NSString 类型的元素,值为@"EFG"
// 删除元素
[mutableArray removeAllObjects]; //这个方法是移除 mutableArray 中的所有元素
[mutableArray removeLastObject]; //这个方法是移除 mutableArray 的最后一个元素
[mutableArray removeObject:(id)]; //这个方法是移除值为id的元素(这样描述其实是不正确的),id实际存放的应该是地址,但字符串除外
例如:[mutableArray removeObject:@"abc"]; //这是在mutableArray 对象中删除了一个值为"abc"的元素
[mutableArray removeObjectAtIndex:(NSUInteger)]; //这个方法是移除位置为 NSUInteger 的元素,这个数字实际是删除类似下标为 NSUInteger的元素
例如:[mutableArray removeObjectAtIndex:3]; //这是删除了第4个元素
//修改元素位置
[mutableArray exchangeObjectAtIndex:(NSUInteger1) withObjectAtIndex:(NSUInteger2)] //这个方法是将位置 NSUInteger1 的元素和 NSUInteger2 的元素进行交换位置
例如:[mutableArray exchangeObjectAtIndex:1 withObjectAtIndex:2];//意思是将第2个元素和第3个元素交换(因为NSUInteger是下标)
/*****
***数组的遍历 (我所了解的目前有三种方式)
****/
1、枚举器法 (这种方法在遍历过程中不能改变数组的个数以及元素的位置,不然会出错)
NSEnumerator * enumerator = [mutableArray objectEnumerator];//构造枚举器
id obj;
while (obj = [enumerator nextObject]) {
//obj既为元素
}
2、快速枚举法 (有的叫做 快速for循环) (这种方法依旧在遍历过程中不能改变数组的个数以及元素的位置,不然会出错)
for(id obj in mutableArray){
//obj既为元素
} //这种方法他们都说是最快的,我也就当作最快的来用
对于枚举器,还有一种叫做逆序枚举器,方法如下
NSEnumerator *enumrator = [mutableArray reverseObjectEnumerator];//构造逆序枚举器,用法同枚举器一样,但不一样的是,用逆序枚举器遍历的时 候,以上两种方法可以改变数组的个数以及元素的位置。
3、使用for循环进行遍历 (这种遍历方法可以在循环中改变数组的个数以及元素的位置)
for (int i = 0; i < [mutableArray count]; i++) {
id obj = [mutableArray objectAtIndex:i];// obj既为元素
}
Objective-C学习-数组 NSArray 和 NSMutableArray(欢迎提意见)
标签:
原文地址:http://www.cnblogs.com/Yue-Wen/p/4690027.html