首先來看看開發(fā)語言中集合的概念庆寺,把一些能夠確定的不同的對象看成一個整體器钟,那么就可以說這個整體是由這些對象全體構成的集合斑司。簡單的說,就是一個由多個對象組成的倉庫姻政。但是倉庫又分為很多種呆抑,一種是可以繼續(xù)填充的,一種是不能填充的汁展。下面我將介紹下oc中的集合鹊碍。
oc中集合分為分為三種:NSArray數(shù)組,NSDictionary字典,NSSet集合厌殉。
一、NSArray數(shù)組
1.1:不可變數(shù)組NSArray
NSArray是不可變數(shù)組侈咕,一旦創(chuàng)建就不能對其進行添加公罕,刪除等操作。
創(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];//獲取指定位置的對象
NSString * str = [array objectAtIndex:0];//第二種方法獲取指定對象耀销。
//初始化一個數(shù)組時楼眷,經(jīng)常使用initWithObject和initWithObjects。沒有s的表示使用一個指針初始化NSArray熊尉,初始化后罐柳,這個NSArray的實例只有一個數(shù)據(jù),所以在調用沒有s的函數(shù)的時候是不能以nil結束的狰住;但是有s的就不一樣了张吉,哪怕只有一個數(shù)據(jù),或者沒有數(shù)據(jù)催植,必須使用一個nil結束肮蛹。
下面幾個重要的實用方法:
+ (id)arrayWithObjects:(id)firstObject, ...;? ? //nilterminated
- (int)count; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 得到array中的對象個數(shù)
- (id)objectAtIndex:(int)index; ? ? ? ? ? ? ? ? ? ? // ?得到索引為i的對象
- (BOOL)containsObject:(id)anObject; ? // 當anObject出現(xiàn)在array中,則返回yes(實際是通過isEqual:方法來判斷)
- (unsigned)indexOfObject:(id)anObject; // 查找array中的anObject,并返回其最小索引值创南。沒找到返回NSNotFound.
- (void)makeObjectsPerformSelector:(SEL)aSelector;
- (NSArray *)sortedArrayUsingSelector:(SEL)aSelector;
- (id)lastObject; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 得到array中最后一個對象伦忠。如果array中沒有任何對象存在,則返回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ù)對象isEqual消息判斷冬耿。
[array removeObjectIdenticalTo:(id)] : 刪除數(shù)組中指定元素,根據(jù)對象的地址判斷
[array removeObjectIdenticalTo:(id) inRange:(NSRange)] : 在指定范圍內(nèi)刪除指定的元素。
[array removeObjectAtIndex:(NSUInteger)]:刪除數(shù)組中指定腳標索引的數(shù)據(jù)萌壳。
[array removeObjectsInArray:(NSArray *)] :刪除一個數(shù)組的元素亦镶。
二、字典
2.1:NSDictionary
NSDictionary是以<key,value>形式存儲的一種集合袱瓮,類似于java中的map缤骨。NSDictionary是靜態(tài)的,當NSDictionary被創(chuàng)建時尺借,則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; ? ? ? ? ? ? ? ? ? ? ? // 返回有多少對key-value
- (id)objectForKey:(id)key; ?//返回和key相關聯(lián)的value笋鄙。 如果沒有和key相關聯(lián)的value师枣,則返回nil。
- (NSArray *)allKeys; ? ? ? ?// 返回一個包含所有key的array
- (NSArray *)allValues;
- NSEnumerator *)keyEnumerator; ? //這個方法是從一個 dictionary 中得到一個 key 的迭代器.
Enumerators也就是 iterators 或 enumerations.我們可以使用它來一步一步迭代出集合中的所 有成員.
下面是我們可能使用它來列 舉所有的 key- ‐vaule 對
NSEnumerator ?*e ?= ?[myDict ?keyEnumerator];
for ?(NSString ?*s ?in ?e) ?{
NSLog(@"key ?is ?%@, ?value ?is ?%@", ?s, ?[myDict ?objectForKey:s]);
}
注:NSArray 也有一個類似的方法得到 array 的成員迭代 器 ? : ?objectEnumerator
2.2:NSMutableDictionary
NSMutableDictionary為NSDictionary的字類萧落,但是可以進行增刪改查等等操作践美。
字典的創(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)建一個空的dictionary
- (void)setObject:(id)anObjectforKey:(id)key; ?// 使用key和anObject組成一條記錄添加到dictionary中
// 如果key已存在拨脉,則會先移除舊的key-value,然后再添加新的key-value宣增。
- (void)removeObjectForKey:(id)key; ? ? ? ? ? ?// 從dictionary中刪除一條記錄玫膀,key以及和它對應的value
- (void)removeAllObjects;
- (void)addEntriesFromDictionary:(NSDictionary *)otherDictionary;
三、Set集合
set集合其實和array集合很類似,只不過array集合時有序的,set集合是無序的不恭。這個方面是和android中的set是類似的。NSSet和我們常用NSArry區(qū)別是:在搜索一個一個元素時NSSet比NSArray效率高解阅,主要是它用到了一個算法hash(散列,也可直譯為哈希)泌霍。
3.1:NSSet
不可變的set货抄。
+(id)setWithObjects:obj1,obj2,...nil使用一組對象創(chuàng)建新的集合
-(id)initWithObjects:obj1,obj2,....nil使用一組對象初始化新分配的集合
-(NSUInteger)count返回集合成員個數(shù)
-(BOOL)containsObject:obj確定集合是否包含對象 obj
-(BOOL)member:obj確定集合是否包含對象 obj
-(NSEnumerator*)objectEnumerator返回集合中所有對象到一個 NSEnumerator 類型的對象
-(BOOL)isSubsetOfSet:nsset判斷集合是否是NSSet的子集
-(BOOL)intersectsSet:nsset判斷兩個集合的交集是否至少存在一個元素
-(BOOL)isEqualToSet:nsset判斷兩個集合是否相等
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;? // 求交集