文章目錄
- NSArray
- 可變數組
- 枚舉
- 快速枚舉
- NSDictionary
Cocoa提供了很多集合類,來提供我們使用,下面就對其中的對象的使用說明
NSArray
NSArray是一個Cocoa類,用來儲存物件的有序列表,你可以在其中放入任意類型的對象:NSString或者是其他你想要儲存的對象,但只能是儲存Objective-C的對象,而不能儲存C語言中的基礎資料型別 (Elementary Data Type),如int、float、enum、struct,或者NSArray中的隨機指標,同時也不能在NSArray中儲存nil(對象的零值或者NULL值)。只要有了一個NSArray,就可以通過各種方式操作它,例如讓某個對象的執行個體對象指向這個數組,將該數組當作參數進行傳遞,擷取資料中所存對象的個數,根據索引來得到相應的對象,尋找數組中的對象,遍曆數組等等。
arrayWithObjects:建立一個新的NSArray,發送一個以逗號分隔的對象列表,可在列表結尾添加nil代表列表結束,這也是為什麼數組不能儲存nil的原因之一。
NSArray *array;
array = [NSArray arrayWithObjects:
@“one”, @“two”,@“three”,nil];
通過NSArray的count:方法可以得到數組的個數;
- (unsigned)count;
也可以如下所示擷取特定索引處的對象:
(id) objectAtIndex: (unsigned int) index;
例:
int i;
for(int i=0; i < [array count]; i++){
NSLog(@“index %d has %”, i, [array objectAtIndex: i]);
}
輸出結果:略。
如果引用的索引計數大於數組裡面對象個數,運行時就會輸出錯誤。
可變數組
NSArray與NSString一樣,建立的是一個不可變的。一旦你用了特定數量的對象建立了一個數組,那麼它就固定下來了:既不能添加任何元素,也不能刪除任何元素。當然,數組裡面的對象是可以改變的,數組自身是不會改變的。
因此引起一個新的可變數組NSMutableArray,這樣就可以隨意的添加或者刪除數組中的對象。
常用的方法如下:
arrayWithCapacity:來建立新的可變數組:
+ (id) arrayWithCapacity: (unsigned) numitems;
例:
NSMutableArray *array;
array = [NSMutableArray arrayWithCapacity: 17];
addObject:在數組末尾添加對象
- (void)addObject:(id)anObject;
removeObjectAtIndex:刪除特定索引處的對象。
- (void) removeObjectAtIndex: (unsigned) index;
枚舉
如果要編寫一個從0到[array count]的迴圈來讀取每個索引處的對象,也可以使用NSEnumerator,它是Cocoa用來描述這種集合迭代運算的方式。要想使用NSEnumerator,需要通過objectEnumerator向數組請求列舉程式:
- [NSEnumerator *]objectEnumerator;
你可以按如下方式使用這個方法:
[NSEnumerator *enumerator;
enumerator = [array objectEnumerator];
如果你想要從後向前瀏覽 ,還可以使用reverseObjectEnumerator。
在獲得列舉程式之後,可以開始一個while迴圈,每次迴圈都向這個列舉程式請求它的nextObject(下一個對象):
- (id) nextObject;
當nextObject返回nil值時,迴圈結束,這也是不能在數組中儲存nil值的另一個原因:我們沒有辦法判斷nil是儲存在數組中的數值還是代表結束的標誌。
整個迴圈如下:
NSEnumerator *enumerator;
enumerator = [array objectEnumerator];
id thingie;
while (thingie = [enumerator nextObject])
{
NSLog(@“I found %@”,thingie);
}
備忘及疑問:如果要使用列舉程式,有一個問題,就是不能用增加或者刪除這類的方法去操作這個可變數組,要不然的話,就會出現問題。這是一個問題,可以試試!
快速枚舉
for (NSString *string in array){
NSLog(@“I found %@”,string);
}
這樣,遍曆數組就有三種方式了,通過索引、使用NSEnumerator和快速枚舉。
NSDictionary
NSDictionary在給定的關鍵字下儲存一個數值(可以是任何類型的對象)。然後可以用這個關鍵字來尋找相應的數值。NSDictionary與NSArray和NSString一樣是不可變的對象,但是NSMutableDictionary類允許你隨意添加和刪除字典元素。在建立新的NSDictionary時,就要提供該字典的全部對象和關鍵字。
dictionaryWithObjectsAndKeys:建立字典。
+ (id) dictionaryWithObjectsAndKeys:(id)firstObject,(NSString)firstKey,,,,;
Dictionary接受對象和關鍵字交替儲存的系統,以nil值為終止符。
例:
Tire *t1 = [Tire new];
Tire *t2 = [Tire new];
Tire *t3 = [Tire new];
Tire *t4 = [Tire new];
NSDictionary *tires;
tires = [NSDictionary dictionaryWithObjectsAndKeys: t1,@”front-left”, t2, @”front-right”, t3, @”back-left”, t4, @”back-right”, nil];
objectForKey:來擷取字典中的值,向方法傳遞之前用來儲存該值的關鍵字。
- (id) objectForKey: (id) aKey;
所以,要從字典中找到其中的一個對象,可以這樣寫:
Tire *tire = [tires objectForKey: @” back-left”];
如果根據關鍵字查不到對象,那麼objectForKey:會返回nil值。
要建立新的NUMutableDictionary對象,向類NSMutableDictionary發送dictionary訊息。你也可以使用dictionaryWithCapacity:方法來建立新的可變字典並且告訴最終大小。
+ (id) dictionaryWithCapacity: (unsigned int) numitems;
setObject:forkey:方法給字典添加元素:
- (void) setObject: (id) anObject forKey: (id) aKey;
下面是另一種建立儲存輪胎的字典的方法:
NSMutableDictionary *tires;
tires = [NSMutableDictionary dictionay];
[tires setObject: t1 forKey:@”front-left”];
注意:如果對字典中已有的關鍵字使用setObject:forKey:,那麼這個方法將會用新值替換原有的數值。如果你想在可變字典刪除一個關鍵字,可使用removeObjectForKey:方法:
- (void) removeObjectForKey:(id) aKey;
例:[tires removeObjectForKey:@”back-left”];