Objective-C 中除了可使用 C 中的基本数组外,如 int[5],char word[] ={‘a’,’b’,’c’};Foundation 还提供了 NSArray 类,其有以下特色:。java
(1)NSArray 是有序的对象集合。
(2)NSArray 保存的对象能够是不一样的对象。
(3)int ,char,double 等基本数据类型不能直接保存,须要经过转换成对象才能加入数组。 例以下面的代码在运行时会报错:数组
NSArray *arr = [[NSArray alloc] initWithObjects:@"abc",@"123",456, nil]; NSLog(@"%@", arr);
就像 NSString 和 NSMutableString 同样,一样也存在可变数组和不可变数组.不可变数组是由 NSArray 类处理的, 而可变数组则是由 NSMutableArrray 处理的.后者是前者的子类,也就是说 NSMutableArrray 继承了 NSArray 的方 法.atom
使用 NSArray 关键字建立一个不可变的数组,一旦初始化完毕后这个数组的元素是不能够在动态的添加与删除。 例如:spa
int main(int argc, const char * argv[]) { @autoreleasepool { //建立一个包含星期的数组 NSArray *days = [NSArray arrayWithObjects:@"SUN", @"MON",@"TUE",@"WED",@"THU",@"FRI",@"SAT", nil]; //获取数组所包含对象个数 NSLog(@"size of days:%ld",(unsigned long)[days count]); //循环打印数组中的元素,比较广泛,但效率不高 for (int i=0; i<[days count]; i++) { NSLog(@"%@",[days objectAtIndex:i]); } //size of days:7 //另外一种方法打印数组中的元素,效率高,推荐使用 for(id day in days){ NSLog(@"%@",day); } } return 0; }
对于数组建立,编译器为了减小代码量,提供了更简便方法,好比:指针
NSArray *days = [NSArray arrayWithObjects:@"SUN", @"MON",@"TUE",@"WED",@"THU",@"FRI",@"SAT", nil];
等价于:code
NSArray *days = @[@"SUN","MON","TUE","WED","THU","FRI","SAT"];
建立多维component
NSArray: NSArray *days = @{ @{@”sum,@”mon”,@”tue”,@”wed”}, @{@”sum,@”mon”,@”tue”,@”fri”} @ { @ ” f r i , @ ” m o n ”, @ ” t u e ”, @ ”s a t ” } @{@”sat,@”mon”,@”tue”,@”wed”} }
NSArray 的类方法 arrayWithObjects:使用一列对象做为元素建立数组,这种状况下须要按顺序列出对象并使用逗号隔开。将这个数组的最后一个值指定为 nil,标记参数数组的结束.它实际上并不会存储在数组中.orm
[array count] : 获得这个数组对象的长度。
[array objectAtIndex index]: 传入数组的索引(index) 获得数据对象。
[arrayWithObjects: ...] :向数组对象初始化赋值。这里能够写任意对象的指针,结尾必须使用 nil,以标志结束.
+(id)arrayWithObjects:obj1,obj2,...nil 建立一个新的数组,obj1,obj2......是他的元素对象,以 nil 对象结尾
-(BOOL)containsObject:obj肯定数组中是否包含对象 obj
-(NSUInteger)count 返回数组元素个数
-(NSUInteger)indexOfObject:obj 第一个包含 obj 元素的索引号
-(id)objectAtIndex;i 返回存储在位置 i 的对象
-(void)makeObjectsPerformSelector:(SEL)selector 将 selector 只是的消息发送给数组中的每一个元素
-(NSArray*)sortedArrayUsingSelector:(SEL)selector 根据 selector 指示的比较方法对数组进行排序,好比:对象
NSArray * array = @[@"b",@"d",@"a",@"z"]; array = [array sortedArrayUsingSelector:@selector(compare:)]; NSLog(@"排序后 array %@",array);
-(BOOL)writeToFile:path atomically:(BOOL)flag 将数组写入指定的文件中,若是 flag 为 YES,则须要先建立一个 临时文件排序
大多时候咱们须要动态的增长和删除数组中的元素,这就须要使用 MSMutableArray。例如:
int main(int argc, const char * argv[]) { @autoreleasepool { //建立一个空数组 NSMutableArray *arrs = [NSMutableArray array]; //C 中的一些基本元素咱们能够用 NSNumber 类来包装,相似 java 中的装箱,另外还有一些 struct 类 型的数据咱们也能够用 NSNumber 类的父类 NSValue 来进行包装,包装成 NSValue 的对象再将其放入数组中。 int age=23; char c='a'; float f=3.1415926; NSRect rect =NSMakeRect(1, 2, 3, 4); NSNumber *objAge = [NSNumber numberWithInt:age]; NSNumber *objC =[NSNumber numberWithChar:c]; NSNumber *objF =[NSNumber numberWithFloat:f]; NSValue *objRect = [NSValue valueWithRect:rect]; [arrs addObject:objAge]; [arrs addObject:objC]; [arrs addObject:objF]; [arrs addObject:objRect]; //若是要添加空的话能够用如下方法 [arrs addObject:[NSNull null]]; NSLog(@"Size of arrs: %li",(unsigned long)[arrs count]); //Size of arrs: 5 NSLog(@"%@",arrs); //建立一个指定初始容量的数组 NSMutableArray *arrs2 = [NSMutableArray arrayWithCapacity:3]; //指定初始容量为 3,但咱们添加了 5 个对象 [arrs2 addObject:@"obj1"]; [arrs2 addObject:@"obj2"]; [arrs2 addObject:@"obj3"]; [arrs2 addObject:@"obj4"]; [arrs2 addObject:@"obj5"]; //将对象 obj 插入到索引为 i 的位置 [arrs2 insertObject:@"obj" atIndex:0]; //删除指定索引处的对象 [arrs2 removeObjectAtIndex:3]; //遍历数组 for(id obj in arrs2) { NSLog(@"%@",obj); //obj,obj1,obj2,obj4,obj5 } //合并字符串数组 NSString *str = [arrs2 componentsJoinedByString:@"|"]; NSLog(@"%@",str); //obj|obj1|obj2|obj4|obj5 //字符串切割成数组 NSArray *arr3=[str componentsSeparatedByString:@"|"]; NSLog(@"%@",arr3); } return 0; }
NSMutableArray 类经常使用方法
array 建立一个空数组
+(id)arrayWithCapacity:size 建立一个数组,指定容量为size
-(id)initWithCapacity:size 初始化一个新分配的数组,指定容量为size
-(void)addObject:obj 将对象 obj 添加到数组末尾
-(void)insertObject:obj atIndex:i 将对象 obj 插入到索引为 i 的位置
-(void)replaceObject:obj atIndex:i 将数组中索引为 i 处的元素用 obj 置换
-(void)removeObject:obj 从数组中删除全部是 obj 的对象
-(void)removeObjectAtIndex:i 从数组中删除索引为 i 的对像
-(void)sortUsingSelector:(SEL)selector 用 selector 只是的比较方法将数组排序