NSDictionary就是字典,顾名思义,它可以像我们平时拿着的高阶字典根据索引就可以马上查找得到对应的英文单词一样,操作一样,速度飞快。
在object-c也是一种散列表,但是它跟set不同的是,字典通过forkey这个索引来快速访问数据,而不用遍历。同样滴,它也是储存全部的Cocoa对象,其他的数据类型
都是需要转换等等。。。。
字典其实是一个很有用的数据类型。比如后面的将使用到plist文件,json数据等等。很多数据都是通过字典的形式来储存的。好好应用字典,可以帮我们的程序提高很高的速率,特别在数据量比较大的情况下。如何像数组遍历的话,那是在是太悲剧了~~~
直接post上可变字典NSDictionary的使用方法:
<p class="p1">@autoreleasepool</p><p class="p2"> {</p><p class="p3"><span class="s1"> </span>//NSString *str = [NSString ]</p><p class="p4"><span class="s1"> </span>NSMutableDictionary<span class="s1"> *dict = [</span>NSMutableDictionary<span class="s1"> </span><span class="s2">dictionary</span><span class="s1">];</span></p><p class="p2"> [dict <span class="s2">setObject</span>:<span class="s3">@"Mike"</span> <span class="s2">forKey</span>:<span class="s3">@"name"</span>];</p><p class="p3"><span class="s1"> [dict </span><span class="s2">setObject</span><span class="s1">:</span><span class="s3">@"Jack"</span><span class="s1"> </span><span class="s2">forKey</span><span class="s1">:</span><span class="s3">@"name"</span><span class="s1">]; </span>//<span class="s4">检测字典的成员的唯一性,</span>the only one!</p><p class="p5"> </p><p class="p2"> [dict <span class="s2">setObject</span>:<span class="s3">@"</span><span class="s5">北京</span><span class="s3">"</span> <span class="s2">forKey</span>:<span class="s3">@"address"</span>];</p><p class="p2"> <span class="s2">NSLog</span>(<span class="s3">@"%@"</span>, dict);</p><p class="p5"> </p><p class="p6"><span class="s6"> </span><span class="s7">//</span>根据<span class="s7">key</span>这个索引值从字典中删除对应的索引以及索引值</p><p class="p7"><span class="s1"> [dict </span>removeObjectForKey<span class="s1">:</span><span class="s3">@"name"</span><span class="s1">];</span></p><p class="p2"> [dict <span class="s2">setObject</span>:<span class="s3">@"chuck"</span> <span class="s2">forKey</span>:<span class="s3">@"friend"</span>];</p><p class="p5"> </p><p class="p6"><span class="s6"> </span><span class="s7">//</span>通过<span class="s7">key</span>这个索引直接从字典中访问对应的值</p><p class="p2"> <span class="s2">NSLog</span>(<span class="s3">@"%@"</span>,[dict <span class="s2">objectForKey</span>:<span class="s3">@"friend"</span>]);</p><p class="p3"><span class="s1"> </span>//<span class="s4">使用</span>for<span class="s4">循环遍历整个循环</span></p><p class="p2"> <span class="s8">/*</span></p><p class="p3"> for (id key in dict)</p><p class="p3"> {</p><p class="p3"> id obj = [dict objectForKey:key];</p><p class="p3"> NSLog(@"%@ == %@", key, obj);</p><p class="p3"> }*/</p><p class="p5"> </p><p class="p6"><span class="s6"> </span><span class="s7">//</span>使用迭代器的方式遍历整个字典</p><p class="p7"><span class="s1"> [dict </span>enumerateKeysAndObjectsUsingBlock<span class="s1">:</span></p><p class="p2"> ^(<span class="s9">id</span> key, <span class="s9">id</span> obj, <span class="s9">BOOL</span> *stop)</p><p class="p2"> {</p><p class="p2"> <span class="s2">NSLog</span>(<span class="s3">@"%@ == %@"</span>, key, obj);</p><p class="p2"> }];</p><p class="p2"> }</p><p class="p1"><span class="s1"> </span>return<span class="s1"> </span><span class="s10">0</span><span class="s1">;</span></p>
根据上面的代码,马上查看输出代码:
<p class="p1"><strong>2014-11-12 23:49:53.013 Foundation05-NSSet[3550:303] {</strong></p><p class="p1"><strong> address = "\U5317\U4eac";</strong></p><p class="p1"><strong> name = Jack;</strong></p><p class="p1"><strong>}</strong></p><p class="p1"><strong>2014-11-12 23:49:53.018 Foundation05-NSSet[3550:303] chuck</strong></p><p class="p1"><strong>2014-11-12 23:49:53.018 Foundation05-NSSet[3550:303] address == </strong><span class="s1"><strong>北京</strong></span></p><p class="p1"><strong>2014-11-12 23:49:53.019 Foundation05-NSSet[3550:303] friend == chuck</strong></p>
总结:
上面没有做出不可变长度的字典的使用方法,其实使用方法都是相近的。
1、从第一次的输出结果可以知道,成员在字典当中的储存具有唯一性的。后面对同一个key对应的值赋值会覆盖之前的,这个是毋容置疑的。
2、通过使用setObect 以及 removeObject的方法操作字典中的成员。同样地,其他的API直接查询.h文件即可。
回顾前面的学习,当字典结合数组一起来使用将会是一件非常好的东西。更多的是因为这些集合都可以可以储存不同类型的Cocoa对象,而不像
c/c++那样只能够储存单一类型的数据。这样为我们的实际使用提供非常大得功能。
---学习回顾博客编写,to be continue!!