首先來看看開發(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;? // 求交集