oc中的集合類

首先來看看開發(fā)語言中集合的概念,把一些能夠確定的不同的對(duì)象看成一個(gè)整體,那么就可以說這個(gè)整體是由這些對(duì)象全體構(gòu)成的集合。簡單的說,就是一個(gè)由多個(gè)對(duì)象組成的倉庫。但是倉庫又分為很多種,一種是可以繼續(xù)填充的,一種是不能填充的。下面我將介紹下oc中的集合。

oc中集合分為分為三種:NSArray數(shù)組,NSDictionary字典,NSSet集合。

一、NSArray數(shù)組

1.1:不可變數(shù)組NSArray

NSArray是不可變數(shù)組,一旦創(chuàng)建就不能對(duì)其進(jìn)行添加,刪除等操作。

創(chuàng)建NSArray數(shù)組方法如下:

NSArray * array=[[NSArray alloc]init];//這是最簡單的創(chuàng)建方法

NSArray *array=[[NSArray arrayInitObjects:@"1",@"2","@3"],nil];

NSArray *array=[[NSArray alloc]initWithObject:@"1",@"2",@"3"],nil];

NSArray *array=@[@"1",@"2",@"3"]//這是最簡單的創(chuàng)建方式

NSString *str=array[0];//獲取指定位置的對(duì)象

NSString * str = [array objectAtIndex:0];//第二種方法獲取指定對(duì)象。

//初始化一個(gè)數(shù)組時(shí),經(jīng)常使用initWithObject和initWithObjects。沒有s的表示使用一個(gè)指針初始化NSArray,初始化后,這個(gè)NSArray的實(shí)例只有一個(gè)數(shù)據(jù),所以在調(diào)用沒有s的函數(shù)的時(shí)候是不能以nil結(jié)束的;但是有s的就不一樣了,哪怕只有一個(gè)數(shù)據(jù),或者沒有數(shù)據(jù),必須使用一個(gè)nil結(jié)束。

下面幾個(gè)重要的實(shí)用方法:

+ (id)arrayWithObjects:(id)firstObject, ...;? ? //nilterminated

- (int)count; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 得到array中的對(duì)象個(gè)數(shù)

- (id)objectAtIndex:(int)index; ? ? ? ? ? ? ? ? ? ? // ?得到索引為i的對(duì)象

- (BOOL)containsObject:(id)anObject; ? // 當(dāng)anObject出現(xiàn)在array中,則返回yes(實(shí)際是通過isEqual:方法來判斷)

- (unsigned)indexOfObject:(id)anObject; // 查找array中的anObject,并返回其最小索引值。沒找到返回NSNotFound.

- (void)makeObjectsPerformSelector:(SEL)aSelector;

- (NSArray *)sortedArrayUsingSelector:(SEL)aSelector;

- (id)lastObject; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 得到array中最后一個(gè)對(duì)象。如果array中沒有任何對(duì)象存在,則返回nil

2.2 NSMutableArray

NSMutableArray為可變數(shù)組,初始化之后則可觸發(fā)增刪改查等燈操作。

//以下為創(chuàng)建NSMutableArray方式

NSMutableArray * array=[NSMutableArray array];

NSMutableArray *array=[NSMutableArray arrayWithCapacity:6]//后面數(shù)字,則是初始化長度,后面可以通過添加或者刪除更改其長度。

NSMutableArray *array=[[NSMutableArray alloc]init];

以下為NSMutableArray常用的方法:

[array removeObject:(id)] :刪除數(shù)組中指定元素,根據(jù)對(duì)象isEqual消息判斷。

[array removeObjectIdenticalTo:(id)] : 刪除數(shù)組中指定元素,根據(jù)對(duì)象的地址判斷

[array removeObjectIdenticalTo:(id) inRange:(NSRange)] : 在指定范圍內(nèi)刪除指定的元素。

[array removeObjectAtIndex:(NSUInteger)]:刪除數(shù)組中指定腳標(biāo)索引的數(shù)據(jù)。

[array removeObjectsInArray:(NSArray *)] :刪除一個(gè)數(shù)組的元素。

二、字典

2.1:NSDictionary

NSDictionary是以<key,value>形式存儲(chǔ)的一種集合,類似于java中的map。NSDictionary是靜態(tài)的,當(dāng)NSDictionary被創(chuàng)建時(shí),則key,value就已經(jīng)存在了,并且不能被修改。在NSDictionary中key是唯一的,但是value可以相同。這類似于map。

NSDictionary創(chuàng)建如下

//- (id) initWithObjectsAndKeys;

//NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"One",@"1",@"Two",@"2",@"Three",@"3",nil];

NSString *string = [dictionary objectForKey:@"One"];

NSLog(@"string:%@",string);

NSLog(@"dictionary:%@",dictionary);

[dictionary release];

NSDictionary常用方法如下:

+ dictionaryWithObjectsAndKeys: (id)firstObject, ...;

- (int)count; ? ? ? ? ? ? ? ? ? ? ? // 返回有多少對(duì)key-value

- (id)objectForKey:(id)key; ?//返回和key相關(guān)聯(lián)的value。 如果沒有和key相關(guān)聯(lián)的value,則返回nil。

- (NSArray *)allKeys; ? ? ? ?// 返回一個(gè)包含所有key的array

- (NSArray *)allValues;

- NSEnumerator *)keyEnumerator; ? //這個(gè)方法是從一個(gè) dictionary 中得到一個(gè) key 的迭代器.

Enumerators也就是 iterators 或 enumerations.我們可以使用它來一步一步迭代出集合中的所 有成員.

下面是我們可能使用它來列 舉所有的 key- ‐vaule 對(duì)

NSEnumerator ?*e ?= ?[myDict ?keyEnumerator];

for ?(NSString ?*s ?in ?e) ?{

NSLog(@"key ?is ?%@, ?value ?is ?%@", ?s, ?[myDict ?objectForKey:s]);

}

注:NSArray 也有一個(gè)類似的方法得到 array 的成員迭代 器 ? : ?objectEnumerator

2.2:NSMutableDictionary

NSMutableDictionary為NSDictionary的字類,但是可以進(jìn)行增刪改查等等操作。

字典的創(chuàng)建:

NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];

添加字典方法:

dictionary setObject:@"One" forKey:@"1"];

[dictionary setObject:@"Two" forKey:@"2"];

[dictionary setObject:@"Three" forKey:@"3"];

[dictionary setObject:@"Four" forKey:@"4"];、

刪除字典方法;

[dictionary removeObjectForKey:@"3"];

其他常用的字典方法:

+ (NSMutableDictionary *)dictionary;? ? ? ? ? ? ? // 創(chuàng)建一個(gè)空的dictionary

- (void)setObject:(id)anObjectforKey:(id)key; ?// 使用key和anObject組成一條記錄添加到dictionary中

// 如果key已存在,則會(huì)先移除舊的key-value,然后再添加新的key-value。

- (void)removeObjectForKey:(id)key; ? ? ? ? ? ?// 從dictionary中刪除一條記錄,key以及和它對(duì)應(yīng)的value

- (void)removeAllObjects;

- (void)addEntriesFromDictionary:(NSDictionary *)otherDictionary;

三、Set集合

set集合其實(shí)和array集合很類似,只不過array集合時(shí)有序的,set集合是無序的。這個(gè)方面是和android中的set是類似的。NSSet和我們常用NSArry區(qū)別是:在搜索一個(gè)一個(gè)元素時(shí)NSSet比NSArray效率高,主要是它用到了一個(gè)算法hash(散列,也可直譯為哈希)。

3.1:NSSet

不可變的set。

+(id)setWithObjects:obj1,obj2,...nil使用一組對(duì)象創(chuàng)建新的集合

-(id)initWithObjects:obj1,obj2,....nil使用一組對(duì)象初始化新分配的集合

-(NSUInteger)count返回集合成員個(gè)數(shù)

-(BOOL)containsObject:obj確定集合是否包含對(duì)象 obj

-(BOOL)member:obj確定集合是否包含對(duì)象 obj

-(NSEnumerator*)objectEnumerator返回集合中所有對(duì)象到一個(gè) NSEnumerator 類型的對(duì)象

-(BOOL)isSubsetOfSet:nsset判斷集合是否是NSSet的子集

-(BOOL)intersectsSet:nsset判斷兩個(gè)集合的交集是否至少存在一個(gè)元素

-(BOOL)isEqualToSet:nsset判斷兩個(gè)集合是否相等

3.2:NSMutableSet

可變的set,可以操作增刪改查。

+ (NSMutableSet *)set;

- (void)addObject:(id)anObject;

- (void)removeObject:(id)anObject;

- (void)removeAllObjects;

- (void)unionSet:(NSSet *)otherSet;? // 求并集

- (void)minusSet:(NSSet *)otherSet;? // 求差集

- (void)intersectSet:(NSSet *)otherSet;? // 求交集

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容