在Object C也提供了類似C#中的Array陣列物件,在Object C中使用NSArray 來建立陣列;但是在Object C中NSArray 只能存放物件型別的指標,不能存放int,char,double等基本資料型別。
一. 不可變陣列物件
這個和之前的NSString有些類似,NSArray 能夠建立不可變的陣列物件。一旦初始化這個物件就不能動態的修改和增加這個陣列。
(1)使用arrayWithObjects來初始化陣列內容,參考如下程式碼:
NSArray *items=[NSArray arrayWithObjects:@"abc",@"cdf"];
上面初始化了一個items陣列物件,但是值得注意的是,這段程式碼會報錯,在Object C中陣列物件的建立有個特殊的地方,就是最後一個元素必須是nil,這意味著使用nil來標識陣列物件的結束。正確的方式如下:
NSArray *items=[NSArray arrayWithObjects:@"abc",@"cdf",nil];
(2)可以使用count方法來獲取陣列的長度
NSArray *items=[NSArray arrayWithObjects:@"abc",@"cdf",nil]; NSLog(@"%d",[items count]);
以上程式碼得到的值是2,還是3呢,一般人都會認為是3,但是這個陣列的長度是2,上面已經提過了nil只是作為一個結束識別符號,並不能代表素組內容。現在修改程式碼如下:
NSArray *items=[NSArray arrayWithObjects:@"abc",@"cdf",nil,nil]; NSLog(@"%d",[items count]);
得到的陣列長度仍然為2,在第一個nil的位置就已經標識陣列結束了,所以後面出現再多的陣列元素都沒有作用。
(3)使用objectAtIndex來獲取某個索引位置的陣列元素
NSLog(@"%@",[items objectAtIndex:0]);
以上程式碼可以獲得素組物件items索引位置為0的元素,但是一定要注意陣列的長度,否則陣列越界異常。
(4)使用for來遍歷陣列元素
for(int i=0;i<[items count];i++){ NSLog(@"%@",[items objectAtIndex:i]); }
以上程式碼和我們平時使用遍歷陣列的方式無異,基本都是這種情況。但是for還有另外一種使用方式,和C#中的foreach使用方式一樣。
for(NSObject *item in items){ NSLog(@"%@",item); }
二. 動態陣列
(1)根據上面所描述的,大致可以猜得出來動態陣列類,和NSMutableString比較類似。我們使用NSMutableArray來定義一個動態陣列。而且NSMutableArray 還提供了一些方法動態像陣列中新增元素,在NSMutableArray不用擔心在新增元素的時候發生陣列越界的問題,當NSMutableArray長度被佔滿之後會自動擴容。
NSMutableArray *mutItems=[NSMutableArray arrayWithCapacity:2];
我們使用arrayWithCapacity來定義一個陣列的容量。
(2)可以使用addObject方法來向物件陣列中新增元素,而且NSMutableArray和NSArray不一樣,不需要使用nil來介紹標識陣列結束。NSMutableArray中同樣提供了count 方法來獲取陣列的長度,這裡需要注意的是count和capacity 是不一樣的,count是獲取的實際長度,而capacity是可存放的長度。
NSMutableArray *mutItems=[NSMutableArray arrayWithCapacity:12]; [mutItems addObject:@"abc"]; [mutItems addObject:@"def"]; NSLog(@"%d",[mutItems count]);
如果往muItems中繼續新增元素,直到超過12個,muItems也不會報錯,而且count也會大於12,這也是NSMutableArray的優勢所在。
(3)使用insertObject 在特定的位置新增元素
NSMutableArray *mutItems=[NSMutableArray arrayWithCapacity:2]; [mutItems addObject:@"abc"]; [mutItems addObject:@"def"]; [mutItems addObject:@"45454"]; NSLog(@"%d",[mutItems count]); [mutItems insertObject:@"wang" atIndex:1]; for (NSString *item in mutItems) { NSLog(@"%@",item); }
(4)刪除陣列中的元素
- (void)removeObject:(id)anObject inRange:(NSRange)range;設定在一定範圍內刪除,如果在這個範圍內沒有匹配的元素則什麼都不刪除。
- (void)removeObject:(id)anObject;刪除指定元素
- (void)removeObjectsInArray:(NSArray *)otherArray;刪除陣列中指定的元素
- (void)removeObjectsAtIndexes:(NSIndexSet *)indexes;刪除指定索引位置的元素
NSRange range=NSMakeRange(0, 2); [mutItems removeObject:@"wang" inRange:range]; for (NSString *item in mutItems) { NSLog(@"----- %@",item); }
(5)替換陣列元素內容
- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject; 可以使用這個方法來替換某個索引位置的元素
[mutItems replaceObjectAtIndex:1 withObject:@"FFFFFFFFFFFFFF"]; for(NSString *item in mutItems){ NSLog(@"************ %@",item); }
本文只是很初略的記錄了學習的一些常用方法,NSArray和NSMutableArray 還提供了大量的其他方法,仍有待繼續努力學習和使用!