Objective-C 日記④ 集合家族

來源:互聯網
上載者:User
一、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,……

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.