O-C04(數(shù)組、字典、集合)

一、數(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ò)充了對原有對象的增刪改操作。

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

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

  • 數(shù)組: 系統(tǒng)提供的數(shù)組類:類似于C語言中的數(shù)組功能。 數(shù)組是一個(gè)大容器,數(shù)組中可以儲(chǔ)存不同的聯(lián)系對象,但必須要保證...
    Sherry宇閱讀 435評論 0 0
  • 一、類和對象 1.定義:類是具有相同特征和行為的事物的抽象,對象是類的具體化,類是對象的類型。 2.面向?qū)ο蟮娜?..
    陳亮宇閱讀 457評論 1 6
  • 數(shù)組 1、固定數(shù)組 2、可變數(shù)組 3、數(shù)組轉(zhuǎn)換 字典 1、不可變字典 2、可變字典 集合 //NSSet 是無序的...
    孫瑋超閱讀 14,265評論 0 13
  • 數(shù)組 1、固定數(shù)組 1.創(chuàng)建數(shù)組(不可變數(shù)組創(chuàng)建后不可變,在創(chuàng)建的時(shí)候要初始化)//對象方法 [[NSArray ...
    Maxfire閱讀 2,244評論 0 1
  • 1. 熟悉Git的基本流程 git clone git add -A git commit -m " " git ...
    9bf19a4010ab閱讀 1,783評論 0 2

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