一、數(shù)組類
數(shù)組是一個(gè)有序的集合,OC中的數(shù)組只能儲(chǔ)存對象類型,但是對于對象的類型沒有限制。
通過下標(biāo)訪問數(shù)組元素,下標(biāo)從0開始。
NSArray:不可變數(shù)組,即:對象創(chuàng)建好了以后,數(shù)組中的元素個(gè)數(shù)不能發(fā)生變化。
NSMutableArray:可變數(shù)組,即對象創(chuàng)建好了以后,數(shù)組中的元素可以靈活進(jìn)行增刪改操作。
1、NSArray創(chuàng)建:
初始化方法:NSArray *names = [[NSArray alloc] initWithObjects:@"frank",@"duck",@"monkey",nil];
注意:nil作為數(shù)組存放元素的結(jié)束標(biāo)志,多個(gè)元素通過逗號間隔。
便利構(gòu)造器:NSArray *names1 = [NSArray arrayWithObjects:@"frank",@"duck",@"monkey",nil];
字面量:使用“@[]”、“[]”中存入對應(yīng)的對象,對象之間使用“,”間隔。比如:NSArray *names2 =@[@"frank",@"duck",@"monkey"];
2、NSArray常用方法:
元素個(gè)數(shù):@property(readonly)NSUInteger count;? ? ? 例如:NSLog(@"%ld",names2.count);
獲取數(shù)組中指定下標(biāo)對應(yīng)的元素:- (id)objectAtIndex:(NSUInteger)index;? 例如:NSLog(@"%@",[names2 objectAtIndex:0]);?
字面量方式獲取數(shù)組元素:字面量方式獲?。簲?shù)組對象[元素下標(biāo)]: NSLog(@"%@",names2[0]);
用來判斷數(shù)組中是否包含某一個(gè)給定的對象:- (BOOL)containsObject:(id)anObject;? 例如:if([names2 containsObject:@"duck"]) {
NSLog(@"包含");
}else{
NSLog(@"不包含");
}
獲取數(shù)組元素對應(yīng)的索引:- (NSUInteger)indexOfObject:(id)anObject;? 例如:NSLog(@"%ld",[names2 indexOfObject:@"duck"]);
3、NSString轉(zhuǎn)換為NSArray:
按照給定的字符串進(jìn)行截取,將截取的多段字符串放入數(shù)組中:- (NSArray*)componentsSeparatedByString:(NSString*)separator;? 例如:有一個(gè)字符串,通過.進(jìn)行分割:NSString *separator =@"www.lanou3g.com";
NSArray *array = [separator componentsSeparatedByString:@"."];
NSLog(@"%@",array);
4、NSArray轉(zhuǎn)換為NSString:
將數(shù)組中的元素按照給定的字符串格式拼接成一個(gè)完整的字符串對象:- (NSString*)componentsJoinedByString:(NSString*)separator; 例:有一個(gè)數(shù)組,通過&將所有元素拼接成一個(gè)字符串:NSArray *array1 =@[@"北京",@"大連",@"河南",@"上海",@"廣州"];
NSString *separator1 = [array1 componentsJoinedByString:@"&"];
NSLog(@"%@",separator1); ? ? (不想加符號(&)直接刪除符號就可以)
5、NSMutableArray概述:
NSmutableArray是OC中的可變數(shù)組,NSMutableArray的父類是NSArray,具有NSArray所有方法,同時(shí)在NSArray的基礎(chǔ)上添加了對自身對象增刪改的操作。
NSMutableArray創(chuàng)建:
初始化方法:NSMutableArray *names4 = [[NSMutableArray alloc] initWithObjects:@"frank",@"duck",@"monkey",@"cow",nil];? (建議使用)
//NSMutableArray *names4 = [[NSMutableArray alloc] initWithCapacity:0];? (不建議使用)
便利構(gòu)造器:NSMutableArray *names3 = [NSMutableArray arrayWithObjects:@"frank",@"duck",@"monkey",@"cow",nil];? (建議使用)
第二種方法://由一個(gè)已知的數(shù)組創(chuàng)建另一個(gè)數(shù)組
NSMutableArray *nam = [NSMutableArray arrayWithArray: names3];
//NSMutableArray *names3 = [NSMutableArray arrayWithCapacity:0];? (不建議使用)
字面量:(創(chuàng)建方式:不可變數(shù)組拷貝一份可變的副本)NSMutableArray *names5 = [@[@"frank",@"duck",@"monkey",@"cow"] mutableCopy];
6、NSMutableArray常用操作:
數(shù)組中添加一個(gè)對象:(在數(shù)組的末尾處添加) ? ? - (void)addObject:(id)object;? 例如: [names5 addObject:@"dog"];
NSLog(@"%@",names5);
數(shù)組中指定位置插入一個(gè)對象:- (void)insertObject:(id)anObject atIndex:(NSUInteger)index;? 例如:[names5 insertObject:@"cat" atIndex:3];? ? NSLog(@"%@",names5);
數(shù)組中移除一個(gè)對象:(根據(jù)內(nèi)存地址判定移除對象,如果對象有重復(fù)的,則如果移除后面的對象,則移除失敗)? ? ? ? - (void)removeObject:(id)object;? 例如:[names5 removeObject:@"cat"];? ? NSLog(@"%@",names5);
移除數(shù)組中最后一個(gè)對象:- (void)removeLastObject;? 例如:[names5 removeLastObject];? NSLog(@"%@",names5);
移除數(shù)組中所有的元素:- (void)removeAllObjects;? 例如:[names5 removeAllObjects];? ? NSLog(@"%@",names5);
移除數(shù)組中指定位置的元素:- (void)removeObjectAtIndex:(NSUInteger)index;? 例如:[names5 removeObjectAtIndex:3];? ? NSLog(@"%@",names5);
使用指定的對象替換指定位置的對象(修改某索引處的元素內(nèi)容):- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject;? 例如://[names5 replaceObjectAtIndex:2 withObject:@"cat"];? NSLog(@"%@",names5);
names5[1] =@"aa";
NSLog(@"%@",names5);
交換指定的兩個(gè)下標(biāo)對應(yīng)的對象(交換兩個(gè)索引處的元素):- (void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2;? 例如:[names5 exchangeObjectAtIndex:0 withObjectAtIndex:2];? ? NSLog(@"%@",names5);
二、字典類
1、字典概述:
字典是一個(gè)無序的集合,用來儲(chǔ)存具有一一對應(yīng)關(guān)系的數(shù)據(jù)。
字典中存儲(chǔ)的每一個(gè)對象都是一對鍵值對,鍵值對包含兩個(gè)部分key和value,key與value的值都是對象類型。key通常都是字符串,且key是唯一的,不允許出現(xiàn)兩個(gè)相同的key。
對于每一對key-value稱為一個(gè)條目(Entry)。
2、字典的特點(diǎn):
與數(shù)組不同,字典靠key存取元素。
key與value必須都是對象類型。
字典中鍵值對的存儲(chǔ)是無序的。
字典分為兩種類型:不可變字典(NSDictionary),可變字典(MSNMutableDictionary)。
3、NSDictionary的創(chuàng)建:
初始化方法:NSDictionary *names6 = [[NSDictionary alloc]initWithObjectsAndKeys:@"frank",@"name1",@"monkey",@"name2",nil];? ? NSLog(@"%@",names6);
注意:先寫value,再寫key,一對key-value是一個(gè)元素,nil作為字典存放元素的結(jié)束標(biāo)志。
便利構(gòu)造器:NSDictionary *names7 = [NSDictionary dictionaryWithObjectsAndKeys:@"frank",@"name1",@"monkey",@"name2",nil];? ? NSString*name = [names7 objectForKey:@"name1"];
NSLog(@"%@",name);
字面量:使用“@{}”,“{}”中存入字典元素,key-value一一對應(yīng),元素之間使用“,”相隔。? 例如:NSDictionary *name8 =@{@"name1":@"frank",@"name2":@"monkey"};? NSString*name1 = name8[@"name1"];
NSLog(@"%@",name1);
4、NSDictionary的常用操作:
獲取字典中鍵值對的個(gè)數(shù):@property(readonly) NSUInteger count;? 例如:NSLog(@"%ld",name8.count);
獲取字典中所有的鍵(字典的一種便利方式):@property(readonly,copy) NSArray *allKeys;? 例如:NSArray *keyArray = name8.allKeys;
for(int i =0; i < keyArray.count; i++) {
NSString *key = keyArray[i];
NSString *value = [name8 objectForKey:key];
NSLog(@"%@ %@",key,value);
}
獲取字典中所有的值:@property(readonly,copy) NSArray *allValues;? 例如: NSLog(@"%@",name8.allValues);
根據(jù)鍵獲得對應(yīng)的值:- (id)objectForKey:(NSString*)anAttribute;? 例如:NSString *anAttribute = [name8 objectForKey:@"name1"];
5、NSMutableDictionary概述:
NSMutableDictionary(可變字典)的父類是NSDictionary,NSMutableDictionary具有NSDictionary所有方法,同時(shí)在其基礎(chǔ)上添加了增加、修改、刪除的操作。
6、NSMutableDictionary創(chuàng)建:
初始化方法:NSMutableDictionary *names9 = [[NSMutableDictionary alloc] initWithCapacity:0];
//創(chuàng)建一個(gè)空字典
NSMutableDictionary *mutableDic = [NSMutableDictionary dictionary];
便利構(gòu)造器:NSMutableDictionary *name9 = [NSMutableDictionary dictionaryWithCapacity:0];
//NSMutableDictionary *mutableDic1 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"文強(qiáng)",@"name",@"12",@"age",nil];
字面量:NSMutableArray *name0 = [@{@"name1":@"frank",@"name2":@"duck"} mutableCopy];
7、NSMutableDictionary常用操作:
字典中添加新的鍵值對以及修改某一對鍵值對:- (void)setObject:(id)anObject forKey:(id)aKey;? 例如:[name0 setObject:@"dog" forKey:@"name1"];? NSLog(@"%@",name0);
移除指定的鍵對應(yīng)的鍵值對:- (void)removeObjectForKey:(id)aKey;? 例如:[name0 removeObjectForKey:@"name1"];? NSLog(@"%@",name0);
移除字典中所有的鍵值對:- (void)removeAllObjects;? 例如:[name0 removeAllObjects];? NSLog(@"%@",name0);
三、集合類
1、集合的描述:
集合作為OC中另一個(gè)容器,開發(fā)過程中使用的范圍并沒有數(shù)組和字典頻繁。OC中的集合分為不可變集合(NSSet)和可變集合(NSMutableSet)兩種。
2、集合的特點(diǎn):
互異性:集合中不能存在兩個(gè)相同的對象。
無序性:集合中的對象沒有順序,先添加的對象不一定在集合中的第一個(gè)位置,后添加的也不一定在最后的位置。
集合常用來處理重用問題。
3、NSSet的創(chuàng)建:
初始化方法:NSSet *se = [[NSSet alloc] initWithObjects:@"frank",@"duck",@"monkey",nil];
便利構(gòu)造器:NSSet *se1 = [NSSet setWithObjects:@"frank",@"duck",@"monkey",nil];
注意:不可變集合一旦創(chuàng)建,集合中的對象無法修改,只能從集合中讀取對象,并且沒有快速創(chuàng)建集合對象的字面量。
4、NSSet的常用操作:
獲取集合中對象的個(gè)數(shù):@property(readonly)NSUIntegercount;? 例如:NSUInteger count = [se count];
獲取集合中所有的對象:@property(readonly,copy)NSArray*allObjects;? 例如:NSArray ?*allObjects = [se allObjects];
從集合中取出一個(gè)對象:- (id)anyObject;? 例如:NSString *s = [se anyObject];
判斷集合中是否包含某一個(gè)指定的對象:- (BOOL)containsObject:(id)anObject;? 例如:NSInteger anObject5 = [se containsObject:@"frank"];
5、NSMutableSet概述:
NSMutableSet(可變集合)的父類是NSSet,具有NSSet所有的方法,同時(shí)在其基礎(chǔ)上又增加了添加和刪除對象的操作。
6、NSMutableSet創(chuàng)建:
初始化方法:NSMutableSet *se3 = [[NSMutableSet alloc]initWithCapacity:0];
便利構(gòu)造器:NSMutableSet *se4 = [NSMutableSet setWithCapacity:0];
7、NSMutableSet常用操作:
添加一個(gè)對象:- (void)addObject:(id)object;? 例如:[se3 addObject:@"dog"];
移除一個(gè)對象:- (void)removeObject:(id)object;? 例如:[se3 removeObject:@"dog"];
移除所有對象:- (void)removeAllObjects;? 例如:[se3 removeAllObjects];
總結(jié):OC中為我們提供了三大容器,數(shù)組,字典和集合,三個(gè)容器中存儲(chǔ)的都是對象類型。
數(shù)組:是一個(gè)有序的集合,當(dāng)我們需要管理有序的一組對象的時(shí)候需要使用數(shù)組。
字典:是一個(gè)無序集合,里面存儲(chǔ)的對象是一個(gè)一個(gè)的鍵值對,我們獲取數(shù)據(jù)的時(shí)候需要使用對應(yīng)的key來操作,并且key在字典中是唯一的。
集合:集合是一個(gè)無序的容器,并且容器中的對象不能夠重復(fù)。
可變?nèi)萜黝悓ο笫遣豢勺內(nèi)萜黝悓ο蟮淖宇?,在擁有父類功能的基礎(chǔ)上,擴(kuò)充了對原有對象的增刪改操作。