1. 程式人生 > >NSDictionary以及NSMutableDictionary用法總結

NSDictionary以及NSMutableDictionary用法總結

轉自: http://www.cnblogs.com/wengzilin/archive/2012/03/15/2397712.html

如有侵犯,請來信[email protected]

NSNull

NSNull大概是Cocoa裡最簡單的類了,只有一個方法

+ (NSNull *) null;

可以這樣新增到集合中

[contact setObject: [NSNull null]

forKey: @"home fax machine"];

訪問時:

id homefax;

homefax = [contact objectForKey: @"home fax machine"];

if (homefax == [NSNull null]) {

// ... no fax machine. rats.

}

//[NSNull null]總是返回一樣份數值,所以你可以使用“==”講該值與其他值進行比較……


22、NSDictionary和NSMutableDictionary

A) NSDictionary

字典是關鍵字和其定義的集合,也被成為散列表或關聯陣列,使用的是鍵查詢的優化儲存方式

1)建立方法: 使用dictionaryWithObjectsAndKeys:來建立字典

+ (id) dictionaryWithObjectsAndKeys: (id) firstObject, ...;

使用方法:

Tire *t1 = [Tire new];

Tire *t2 = [Tire new];

Tire *t3 = [Tire new];

Tire *t4 = [Tire new];

NSDictionary *tires;

tires = [NSDictionary dictionaryWithObjectsAndKeys:

t1, @"front- left", t2, @"front- right",

t3, @"back- left", t4, @"back- right", nil];

2)常用方法

- (id) objectForKey: (id) aKey;

使用方法:

Tire *tire = [tires objectForKey: @"back- right"];   //如果沒有則會返回nil值

B) NSMutableDictionary

1)建立方法:

可以向類NSMutableDictionary傳送dictionary訊息

也可以使用函式+ (id) dictionaryWithCapacity: (unsigned int) numItems;

2)常用方法

可以使用setObject:forKey:方法給字典新增元素:

- (void) setObject: (id) anObject forKey: (id) aKey;

- (void) removeObjectForKey: (id) aKey;

使用方法:

NSMutableDictionary *tires;

tires = [NSMutableDictionary dictionary];

[tires setObject: t1 forKey: @"front- left"];

[tires setObject: t2 forKey: @"front- right"];

[tires setObject: t3 forKey: @"back- left"];

[tires setObject: t4 forKey: @"back- right"];

//若已經存在,則會用新值替換原有的值

[tires removeObjectForKey: @"back- left"];

23、不要建立NSString、NSArray或NSDictionary的子類,因為在Cocoa中,許多類實際上是以類簇的方式實現的,即他們是一群隱藏在通用介面之下的與實現相關的類

24、Foundation例項 //查詢檔案

A)使用列舉遍歷

int main (int argc, const char *argv[])

{

NSAutoreleasePool *pool;

pool = [[NSAutoreleasePool alloc] init]; //自動釋放池

NSFileManager *manager; //Cocoa中有很多類都是單例項構架,即只需要一個例項,你真的只需要一個檔案管理器

manager = [NSFileManager defaultManager]; // defaultManager方法建立一個屬於我們的NSFileManager物件

NSString *home;

home = [@"~" stringByExpandingTildeInPath]; // stringByExpandingTildeInPath方法可將~替換成當前使用者的主目錄

NSDirectoryEnumerator *direnum; //NSEnumerator的子類

direnum = [manager enumeratorAtPath: home]; //建立一個列舉條件

NSMutableArray *files;

files = [NSMutableArray arrayWithCapacity: 42]; //把搜尋的結果作為檔案儲存

NSString *filename;

while (filename = [direnum nextObject]) {//呼叫nextObject時,都會返回該目錄中的一個檔案的另一個路徑,也可搜尋子目錄

if ([[filename pathExtension]   // pathExtension輸出檔案的副檔名(去掉了前面的點.)

isEqualTo: @"jpg"]) {

[files addObject: filename];

}

}

NSEnumerator *fileenum;

fileenum = [files objectEnumerator];

while (filename = [fileenum nextObject]) {

NSLog (@"%@", filename);

}

[pool drain];

return (0);

} // main

B)使用快速遍歷

int main (int argc, const char * argv[]) {

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

NSFileManager *manager;

manager = [NSFileManager defaultManager];

NSString *home;

home = [@"~" stringByExpandingTildeInPath];

NSMutableArray *files;

files = [NSMutableArray arrayWithCapacity: 42];

for (NSString *filename

in [manager enumeratorAtPath: home]) {

if ([[filename pathExtension]

isEqualTo: @"jpg"]) {

[files addObject: filename];

}

}

for (NSString *filename in files) {

NSLog (@"%@", filename);

}

轉自:http://www.cnblogs.com/wengzilin/archive/2012/03/15/2397549.html

做過Java語言 或者 C語言 開發的朋友應該很清楚 關鍵字map 吧,它可以將資料以鍵值對兒的形式儲存起來,取值的時候通過KEY就可以直接拿到對應的值,非常方便。在Objective-C語言中 詞典物件就是做這個事情的,不過在同一個詞典物件中可以儲存多個不同型別的資料,不像Java與C 只能儲存宣告的相同型別的資料,它的關鍵字為NSDictionary與NSMutableDictionary。閱讀過我之前文章的朋友應該從關鍵字的 結構就可以看出這兩個的區別。很明顯前者為不可變詞典,或者為可變詞典。

NSDictionary *dict;

for(NSString * akey in dict)

{

  //........

}很好用

1.建立不可變詞典

[NSDictionary dictionaryWithObjectsAndKeys:..] : 使用鍵值對兒直接建立詞典物件,結尾必需使用nil標誌結束

[NSDictionary initWithObjectsAndKeys:..] :使用鍵值對兒初始化詞典物件,結尾必需使用nil標誌結束。

[dictionary count]: 得到詞典的長度單位。

[dictionary keyEnumerator]: 將詞典的所有KEY儲存在NSEnumerator中,NSEnumerator很像Java語言 中的迭代器,使用快速列舉可以遍歷詞典中所有儲存KEY值。

[dictionary  objectEnumerator]: 將詞典的所有value儲存在NSEnumerator中,用法和上面差不多可用來遍歷KEY對應儲存的Value值。

[dictionary objectForKey:key]: 通過傳入KEY物件可以拿到當前KEY對應儲存的值。

複製程式碼
#import <UIKit/UIKit.h>
#import "MyClass.h"
int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  
    //新增我們的測試程式碼    
    NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"雨鬆MOMO",@"name",@"15810463139",@"number", nil];
    
    //得到詞典的數量    int count = [dictionary count];
    NSLog(@"詞典的數量為: %d",count);
    
    //得到詞典中所有KEY值    NSEnumerator * enumeratorKey = [dictionary keyEnumerator];
    
    //快速列舉遍歷所有KEY的值    for (NSObject *object in enumeratorKey) {
        NSLog(@"遍歷KEY的值: %@",object);
    }
    
    //得到詞典中所有Value值     NSEnumerator * enumeratorValue = [dictionary objectEnumerator];
    
    //快速列舉遍歷所有Value的值    for (NSObject *object in enumeratorValue) {
        NSLog(@"遍歷Value的值: %@",object);
    }
    
    //通過KEY找到value    NSObject *object = [dictionary objectForKey:@"name"];
    
    if (object != nil) {
        NSLog(@"通過KEY找到的value是: %@",object);
    }
    
    
    
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}
複製程式碼

2.建立可變詞典物件

NSMutableDictionary 是NSDictionary的子類,所以繼承了NSDictionary的方法。

[NSMutableDictionary dictionaryWithCapacity:10] : 建立一個可變詞典初始指定它的長度為10.,動態的新增資料如果超過10這個詞典長度會自動增加,所以不用擔心陣列越界。推薦用這種方式

[NSMutableDictionary initWithCapacity:10]  :只是初始化一個詞典的長度為10。

[dictionary setObject:@"雨鬆MOMO" forKey:@"name"] :向可變的詞典動態的新增資料 ,這裡的key是name ,值是雨鬆MOMO如果詞典中存在這個KEY的資料則直接替換這個KEY的值。(易混的地方,慎重!)

[dictionary removeAllObjects..] : 刪除掉詞典中的所有資料。

[dictionary removeObjectForKey..] :刪除掉詞典中指定KEY的資料 。

複製程式碼
#import <UIKit/UIKit.h>
#import "MyClass.h"
int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  
    //新增我們的測試程式碼
    
    //建立詞典物件,初始化長度為10    NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithCapacity:10];
   
    //向詞典中動態新增資料    [dictionary setObject:@"雨鬆MOMO" forKey:@"name"];
    
    [dictionary setObject:@"15810463139" forKey:@"number"];
    
    
    //通過KEY找到value    NSObject *object = [dictionary objectForKey:@"name"];
    
    if (object != nil) {
        NSLog(@"通過KEY找到的value是: %@",object);
    }
    
    
    
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}
複製程式碼

詞典類的存在就是為了解決在大量資料中查詢方便,因為它是通過key直接找到value所以速度很快,避免一個個的遍歷尋找造成的效率低下,善用字典類會幫你的程式提速。


相關推薦

NSDictionary以及NSMutableDictionary用法總結

轉自: http://www.cnblogs.com/wengzilin/archive/2012/03/15/2397712.html 如有侵犯,請來信[email protected] NSNull NSNull大概是Cocoa裡最簡單的類了,只有一個方法

C++中string型別求長度用法以及c_str用法總結

1.C++中求string型別的長度有三種方式。在c++中,string代表一個類,有它自己的建構函式和成員函式。有兩個成員函式都可以求string型別的長度。①  length()成員函式。②  size()成員函式。③  可以藉助strlen函式,但是前提是需要將stri

js中的onclick事件和JQuery中的click方法以及on方法事件用法總結

1.onclick是繫結的事件(它是一個事件),注意該事件繫結只是JacaScript中有(js中的),Jquery中並沒有此事件,告訴瀏覽器在滑鼠點選時候要做什麼 2.click方法(jquery中的)作用是觸發onclick事件,只要執行了元素的click()方法,就會觸發onclick事件

IDEA用法總結之三(以及總結今天用IDEA實現spring+springmvc+mongodb的後臺專案)

專案名為wanan    在IDEA上使用IDEA的時候:說明一下之前在IDEA用法總結之二的時候,用IDEA add fram來新增架構,完全沒有必要,這裡要注意的是pom.xml 檔案的編寫,寫好了就可以直接用!!!!!下面是主要參考的部落格先建立一個maven-arch

List Set Map以及子介面用法總結

Collection ├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap └WeakHashMap list 和set 有共同的父類Collection  它們的用法也是一樣的 唯

sql索引的定義以及用法總結

索引定義:SQL Server允許使用者在表中建立索引,指定按某列預先排序,從而大大提高查詢速度(類似於漢語詞典中按照拼音或者字畫查詢)。 索引作用:通過索引可以大大的提高資料庫的檢索速度,提高資料庫的效能。 索引的型別: 1:唯一索引:唯一索引不允許兩行有相同的索引值

C#操作字串以及正則表示式的用法總結

string是C#的基本型別,System.String是一個類庫,兩者本質上是沒有什麼差別的。編碼時使用string時系統會自動將其變換成String型別,多進行一次變換,所以在編碼時最好用後者。格式化字串有兩種方法: public string ToStr

oc知識總結NSDictionaryNSMutableDictionary

注:字典是由鍵-值對組成的資料集合,他是無序的一組集合,我們通過key查詢對應的value,key通常是字串物件,在字典中,key的值必須是唯一的,而且key不能為空。 字典分為兩種:不可變字典(NSDictionary)和可變字典(NSMutableDctionary)

git branch用法總結

如果 命名 參數 war blank org 2.6 重命名 scm Git branch git branch 不帶參數:列出本地已經存在的分支,並且在當前分支的前面加“*”號標記,例如: #git branch* master

numpy中一些常用函數的用法總結

num matrix 空白 記錄 維數 補充 結果 創建 array 先簡單記錄一下,後續補充詳細的例子 1. strip()函數 s.strip(rm):s為字符串,rm為要刪除的字符序列 只能刪除開頭或是結尾的字符或者字符串。不能刪除中間的字符或是字符串 當rm為空

數組去重,call、apply、bind之間的區別,this用法總結

步驟 -- 之間 undefined 定義 ply clas turn 需要 一、數組去重,直接寫到Array原型鏈上。 1 //該方法只能去除相同的數字 不會去判斷24和‘24‘是不同的 所有數字和字符串數字是相同是重復的 2 Array.prototype

JavaSE(一) IO類層次關系和各種IO流的用法總結

思想 單位 out 9.png 什麽 輸入流 謝謝 混亂 體系       今天把IO流的這一知點進行一下總結,因為在之前使用io流的時候,就只知道幾個重點常用的IO類,比如FileInputStream,BufferedInputStream(緩沖流)等等,但是不知道它處

netty用法總結

ram sed 解碼 coder fff ade med 長度 bte /**decoder和encoder,如果不需要解析,就使用系統的 * ch.pipeline().addLast(new StringDecoder()); * ch.pipeline().add

html、val、attr、prop區別。this.value和$(this).val()區別以及return用法

生態 所有 select 批量 控制 添加屬性 ext his 區別 html(): html() 方法返回或設置被選元素的內容 (inner HTML)。 當使用該方法讀取多個值時,它會返回第一個匹配元素的內容。 當使用該方法設置一個值時,它會覆蓋所有匹配元素的內容。 取

delphi CxGrid用法總結(63問)

重復 註釋 ccid nvi while ren 數據顯示 ray 序號 1. 去掉cxGrid中臺頭的Box 解決:在tableview1的optionsview的groupbybox=false; **********************************

Oracle中Merge into用法總結 (轉載)

字符 存在 sin 刪除 ron mic 但是 多個 前段時間 Oracle中Merge into用法總結 (出處:http://www.cnblogs.com/dongsheng/p/4384754.html) 起因:   前段時間,因為涉及到一張表的大數據操作,要同時

Java中static關鍵字用法總結

副本 大括號 跟著 rac clas main 靜態成員變量 abstract 全局變量 1. 靜態方法 通常,在一個類中定義一個方法為static,那就是說,無需本類的對象即可調用此方法 聲明為static的方法有以下幾條限制: · 它們僅能調用其他的sta

c/c++中const用法總結

沒有 pan 分配 值類型 變量初始化 _id 多少 部分 參數 1、修飾常量時:   const int temp1; //temp1為常量,不可變   int const temp2; //temp2為常量,不可變 2、修飾指針時:   主要看const在*的前後,

SVN switch 用法總結

完全 如果 jpg 進入 空間 簡單 src 控制 用法總結 一直知道SVN有個switch命令,但是對它的介紹教程卻很少,大多是生硬的svn幫助文檔裏的文字,從而一直不怎麽會用。今天看了這篇文章,突覺豁然開朗,整理下來以備查閱。 使用SVN,自然是需要與別人合作開發才能體

Java中instanceof關鍵字的用法總結

animal copy false 運算 erl 一個 strong 以及 繼承 instanceof是Java的一個二元操作符,和==,>,<是同一類東東。由於它是由字母組成的,所以也是Java的保留關鍵字。它的作用是測試它左邊的對象是否是它右邊的類的實例,