日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Object C学习笔记13-Dictionary字典

發(fā)布時(shí)間:2023/11/30 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Object C学习笔记13-Dictionary字典 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  通過Array數(shù)組和Set集合的學(xué)習(xí)和理解,可以想象得到Dictionary也分為兩種情況了,那就是可變和不可變兩種類型的。的確如此,在Object C中提供了兩個(gè)字典類,分別為NSDictionary 和 NSMutableDictionary. 在.NET中我們也學(xué)習(xí)過Dictionary類,這個(gè)集合的存儲(chǔ)方式是鍵值對(duì)的方式存儲(chǔ)的。而且使用Dictionary查找元素也極為簡(jiǎn)單。

?

  一 NSDictionary 不可變字典

    (1) 初始化字典

NSDictionary *dic=[NSDictionary dictionaryWithObject:@"hechen" forKey:@"name"];NSDictionary *dic1=[NSDictionary dictionaryWithObjectsAndKeys:@"hechen",@"name",@"25",@"age", nil];NSDictionary *dic2=[[NSDictionary alloc] init];NSLog(@"%d",[dic count]);NSLog(@"%d",[dic1 count]);NSLog(@"%d",[dic2 count]);

    上面列舉了三種方式來初始化字典對(duì)象:

    1. [[NSDictionary alloc] init] 方法最為常見了,先給NSDictionary分配空間再初始化,這也是大眾的方式;

    2. 使用dictionaryWithObject forkey 該方法在初始化的時(shí)候提供了兩個(gè)參數(shù),第一個(gè)為存儲(chǔ)的值,第二個(gè)為key,這個(gè)和我們平時(shí)在.NET中有點(diǎn)不一樣的,這里的key是放在后面的。

    3. 使用dictionaryWithObjectsAndKeys 這個(gè)方法同樣用于初始化NSDictionary,這里可以傳入多個(gè)值,奇數(shù)為value值,偶數(shù)為key值,但是必須以nil形式結(jié)尾。這個(gè)和之前的NSArray,NSSet一致,標(biāo)識(shí)集合的結(jié)束。

    (2)獲得NSDictionary的長(zhǎng)度

    NSDictionary的長(zhǎng)度使用方法count方法來獲得,這個(gè)和大多數(shù)集合一樣

NSDictionary *dic=[NSDictionary dictionaryWithObject:@"hechen" forKey:@"name"];NSDictionary *dic1=[NSDictionary dictionaryWithObjectsAndKeys:@"hechen",@"name",@"25",@"age", nil];NSDictionary *dic2=[[NSDictionary alloc] init];NSLog(@"%d",[dic count]);NSLog(@"%d",[dic1 count]);NSLog(@"%d",[dic2 count]); 測(cè)試?yán)?/span>

    以上代碼中獲得了三個(gè)NSDictionary的長(zhǎng)度,分別輸出的結(jié)果為1,2,0;這里也剛好說明了上面三種方式初始化的不同之處。

    (3)獲得NSDictionary中Keys的迭代

NSEnumerator *enumer=[dic1 keyEnumerator];NSString *key2=[enumer nextObject];while(key2!=nil){NSLog(@"輸出Key=%@",key2);key2=[enumer nextObject];}

    以上代碼可以看得出來使用keyEnumerator 方法獲取NSDictionary Key的集合迭代,然后使用迭代器遍歷輸出所有的元素。

    (4)獲取NSDictionary中的Values的迭代

NSEnumerator *enumerObject=[dic1 objectEnumerator];for(NSObject *object in enumerObject){NSLog(@"輸出Value = %@",object);} 測(cè)試案例

    獲取Value的方法和獲取key的方法基本類似,這里在循環(huán)遍歷的時(shí)候有些不同,但是兩者的結(jié)果是一樣的,可以稍微注意一下

    (5)根據(jù)Key獲取Value

NSString *va=[dic1 objectForKey:@"name"];NSLog(@"objectForKey = %@",va);

    在Object C通過key獲取Value要使用方法objectForKey,在上面的案例中已經(jīng)簡(jiǎn)單而且明確的展示了其用法。

?

  二. NSMutableDictionary 動(dòng)態(tài)字典

    NSMutableDictionary 是NSDictionary的子類,繼承了其所有的方法和屬性。但是和NSDictionary有著一定的區(qū)別就是NSMutableDictionary可以動(dòng)態(tài)的修改和增加刪除里面的元素。

    (1)?dictionaryWithCapacity方法設(shè)置其初始容量

NSMutableDictionary *muDic1=[NSMutableDictionary dictionaryWithCapacity:10];

    上面的代碼中初始化了一個(gè)NSMutableDictionary對(duì)象,并且設(shè)置其初始容量為10; 和NSMutableArray,NSMutableSet一樣,當(dāng)存儲(chǔ)的元素達(dá)到最大容量之后會(huì)自動(dòng)擴(kuò)充容量,所以不用擔(dān)心數(shù)組越界。

    (2) 往NSMutableDictionary中添加元素

[muDic1 setObject:@"中國(guó)" forKey:@"name"];[muDic1 setObject:@"area" forKey:@"add"];NSEnumerator *enumerKeys=[muDic1 keyEnumerator];for(NSString *key in enumerKeys){NSString *value=[muDic1 objectForKey:key];NSLog(@"輸出的值 = %@",value);}

    從以上代碼可以看到使用 setObject forKey 方法可以往字典中添加元素, 方法的前一個(gè)參數(shù)為value,后一個(gè)參數(shù)為key。使用循環(huán)可以得到相應(yīng)的值。

    (3) 刪除字典中的元素

[muDic1 removeObjectForKey:@"add"];for(NSString *key in [muDic1 keyEnumerator]){NSLog(@"-----%@",[muDic1 objectForKey:key]);}

    以上代碼是根據(jù)一個(gè)key值來刪除NSMutableDictionary中的元素,所使用的方法為removeObjectForKey,在NSMutableDictionary中還提供了根據(jù)多個(gè)key值刪除的元素的方法。

    - (void)removeObjectsForKeys:(NSArray *)keyArray;這個(gè)方法參數(shù)為一個(gè)數(shù)組,用于刪除數(shù)組中包含的key的所有元素。

[muDic1 removeObjectsForKeys:[NSArray arrayWithObjects:@"ab", nil]];[muDic1 removeAllObjects];for(NSString *key in [muDic1 keyEnumerator]){NSLog(@"*********%@",[muDic1 objectForKey:key]); }

    上面第一句代碼用于從數(shù)組中刪除包含的元素,而第二句則用于刪除NSMutableDictionary中的所有元素。最終沒有任何結(jié)果輸出。

?

    以上是關(guān)于字典的相關(guān)內(nèi)容的簡(jiǎn)單介紹,系統(tǒng)提供的方法遠(yuǎn)不止這些,仍需要不斷的去努力與實(shí)踐,實(shí)踐永遠(yuǎn)是最有效的方法。

?

    有人問我這學(xué)習(xí)Object C是要搞iphone開發(fā)的節(jié)奏啊,其實(shí)不是為了開發(fā)iPhone才學(xué)習(xí)Object C的,只是為了讓自己還能靜下心來去學(xué)習(xí),好在實(shí)施過程中給客戶交流還有扯淡的資本!

轉(zhuǎn)載于:https://www.cnblogs.com/qingyuan/p/3590094.html

總結(jié)

以上是生活随笔為你收集整理的Object C学习笔记13-Dictionary字典的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。