objective-c之集合家族

來源:互聯網
上載者:User
文章目錄
  • 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”];

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.