一、NSArray
NSArray是Cocoa的一個類,用來儲存對象的有序列表。
限制:
1、只能儲存Object-C的對象,不能儲存C語言中的基礎資料型別 (Elementary Data Type),如:int、float、enum、struct或者NSArray中的隨機指標;
2、不可以儲存nil(對象的零值或NULL值);至於為什麼繼續向下看
如何建立?
通過類arrayWithObjects建立NSArray,以逗號分隔對象列表,在列表尾部添加nil代表列表結束(這就是不能在數組中儲存nil的第一個原因(第二個繼續向下))
可以使用NSNull代表沒有值 +(NSNull *) null;
NSArray *array; array=[NSArray arrayWithObjects:@"1",@"2",@"3",nill];
數組對象個數:-(unsigned) count;
根據索引擷取對象:-(id)objectAtIndex:(unsigned int)index;
eg:
#import<Foundation/Foundation.h>int main(int argc,const char *argv){ NSArray *array; array=[NSArray arrayWithObjects:@"1",@"2",@"3",nil]; int i; for(i=0;i<[array count];i++) { NSLog(@"第 %d 是:%@",i,[array objectAtIndex:i]); }}
效果:
切分數組
使用-componentsSeparatedByString來切分NSArray
NSString *string=@"kaka:18:PEPE:20";
NSLog(@"沒改變之前的我:%@",string);
NSArray *array=[string componentsSeparatedByString:@":"]; [kəm'pəunənt] adj. 組成的,構成的n. 成分;組件;元件 ['sepəreit, 'sepərit]vt. 使分離;使分開;使分居
使用componentsJoinedByString來合并NSArray中的元素並建立字串
string=[array componentsJoinedByString:@"*"];
NSLog(@"改變之後的我:%@",string);
eg:
二、可變數組NSMutableArray
NSString有一個可變字串NSMutableString同理數組NSArray也有一個可變數組NSMutableArray建立方式同NSMutableString 如下:
+(id)arrayWithCapacity:(unsigned)numitems
eg:
NSMutableArray *array2 ; array2=[NSMutableArray arrayWithCapacity:17]; NSArray *array3=[NSArray arrayWithObjects:@"one",@"two",@"three",nil]; [array2 addObject:array3]; int i; for( i=0;i<[array2 count];i++) { NSLog(@"第 %d 是:%@",i,[array2 objectAtIndex:i]); }
效果:
刪除:-(void)removeObjectAtIndex:(unsigned)index;
三、枚舉王國
NSEnumerator它是Cocoa用來描述集合迭代運算的方式,可以通過objectEnumerator向數組請求列舉程式:
-(NSEnumerator *)objectEnumerator;
eg:
#import<Foundation/Foundation.h>int main(int argc,const char *argv){ NSArray *array; array=[NSArray arrayWithObjects:@"A",@"B",@"C",nil]; NSEnumerator *enumerator; enumerator=[array objectEnumerator]; id thing; //nextObject返回nil值時表示迴圈結束 while(thing=[enumerator nextObject]){ NSLog(@"I found %@",thing); } //reverseObjectEnumerator從後向前瀏覽集合 enumerator= [array reverseObjectEnumerator]; while(thing=[enumerator nextObject]){ NSLog(@"I found %@",thing); }}
效果:
注意:
1、xtObject返回nil時表示迴圈結束這也是數組NSArray不能有nil的第二個原因
2、不可以通過添加或者刪除對象的方式來改變數組容器
四、快速枚舉
書上說是這樣子的:
NSString *string; for( string in array){ NSLog(@"I found %@",string); }
可是我是Nodepad++ vs GNU 可能如書上所說這是一個新特性,運行不了;適合在Leopard或更進階版本的系統上運行程式
總結:
介紹了三種方式遍曆數組:索引、NSEnumerator、快速枚舉
如果你的系統是高版本的作業系統或者是Leopard ['lepəd]n. 豹;美洲豹的那麼選擇第三種快速枚舉.原因很簡單就是快速簡潔。
五、字典(又稱:散列表、關聯陣列)
NSDictionary:在給定的關鍵字(通常是一個NSString字串)下儲存一個數值(可以是任何類型的的對象)。
字典和數組都可以儲存資料,但是對於頻繁的查詢大型的資料集來說使用字典的效率更高因為字典是鍵查詢的最佳化儲存方式,可以立即尋找出要查詢的資料,而不需要迴圈整個數組進行查詢資料
使用類方法dictionaryWithObjectsAndKeys來建立字典,以nil值作為終止符號
+(id)dictionaryWithObjectsAndKeys:(id)firstObject,……