OC之NSArray/NSMutableArrray

Objective-C中除了可使用C中的基本數組外,int[5],char word[] ={a,b,c};Foundation還提供了NSArray類,其有以下特色:。java

(1)NSArray是有序的對象集合。數組

(2)NSArray保存的對象能夠是不一樣的對象atom

(3)int ,char,double等基本數據類型不能直接保存,須要經過轉換成對象才能加入數組。spa

例以下面的代碼在運行時會報錯:.net

NSArray *arrs = [[NSArray alloc]initWithObjects:@」abc」,@」123」,456,nil];指針

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

NSArray 不可變數組orm

使用NSArray關鍵字建立一個不可變的數組,一旦初始化完畢後這個數組的元素是不能夠在動態的添加與刪除。例如:對象

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]);  //size of days:7

 

        //循環打印數組中的元素,比較廣泛,但效率不高

        for (int i=0; i<[days count]; i++) {

            NSLog(@"%@",[days objectAtIndex:i]);

        }

 

        //另外一種方法打印數組中的元素,效率高,推薦使用

        for(id day in days){

            NSLog(@"%@",day);

        }

    }

    return 0;

}

對於數組建立,編譯器爲了減小代碼量,提供了更簡便方法,好比:

NSArray *days = [NSArray arrayWithObjects:@"SUN",

@"MON",@"TUE",@"WED",@"THU",@"FRI",@"SAT", nil];

等價於:

NSArray *days =

@[@"SUN","MON","TUE","WED","THU","FRI","SAT"];

建立多維NSArray:

NSArray *days = @{

@{@」sum,@」mon」,@」tue」,@」wed」},

@{@」sum,@」mon」,@」tue」,@」fri」}

@{@」fri,@」mon」,@」tue」,@」sat」}

@{@」sat,@」mon」,@」tue」,@」wed」}

}

NSArray的類方法arrayWithObjects:使用一列對象做爲元素建立數組,這種狀況下須要按順序列出對象並使用逗號隔開。將這個數組的最後一個值指定爲nil,標記參數數組的結束.它實際上並不會存儲在數組中.

[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 只是的比較方法將數組排序

相關文章
相關標籤/搜索