Objective-C Foundation 之NSArray/NSMutableArrray

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);

clipboard.png

就像 NSString 和 NSMutableString 同樣,一樣也存在可變數組和不可變數組.不可變數組是由 NSArray 類處理的, 而可變數組則是由 NSMutableArrray 處理的.後者是前者的子類,也就是說 NSMutableArrray 繼承了 NSArray 的方 法.atom

NSArray不可變數組

使用 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 可變數組

大多時候咱們須要動態的增長和刪除數組中的元素,這就須要使用 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 只是的比較方法將數組排序

相關文章
相關標籤/搜索