Object C學習筆記13-Dictionary字典

  經過Array數組和Set集合的學習和理解,能夠想象獲得Dictionary也分爲兩種狀況了,那就是可變和不可變兩種類型的。的確如此,在Object C中提供了兩個字典類,分別爲NSDictionary 和 NSMutableDictionary. 在.NET中咱們也學習過Dictionary類,這個集合的存儲方式是鍵值對的方式存儲的。並且使用Dictionary查找元素也極爲簡單。數組

 

  一 NSDictionary 不可變字典iphone

    (1) 初始化字典ide

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]);
        

    上面列舉了三種方式來初始化字典對象:學習

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

    2. 使用dictionaryWithObject forkey 該方法在初始化的時候提供了兩個參數,第一個爲存儲的值,第二個爲key,這個和咱們平時在.NET中有點不同的,這裏的key是放在後面的。spa

    3. 使用dictionaryWithObjectsAndKeys 這個方法一樣用於初始化NSDictionary,這裏能夠傳入多個值,奇數爲value值,偶數爲key值,可是必須以nil形式結尾。這個和以前的NSArray,NSSet一致,標識集合的結束。code

    (2)得到NSDictionary的長度對象

    NSDictionary的長度使用方法count方法來得到,這個和大多數集合同樣blog

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]);
        
測試例子

    以上代碼中得到了三個NSDictionary的長度,分別輸出的結果爲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);
        }
測試案例

    獲取Value的方法和獲取key的方法基本相似,這裏在循環遍歷的時候有些不一樣,可是二者的結果是同樣的,能夠稍微注意一下

    (5)根據Key獲取Value

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

    在Object C經過key獲取Value要使用方法objectForKey,在上面的案例中已經簡單並且明確的展現了其用法。

 

  二. NSMutableDictionary 動態字典

    NSMutableDictionary 是NSDictionary的子類,繼承了其全部的方法和屬性。可是和NSDictionary有着必定的區別就是NSMutableDictionary能夠動態的修改和增長刪除裏面的元素。

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

NSMutableDictionary *muDic1=[NSMutableDictionary dictionaryWithCapacity:10];

    上面的代碼中初始化了一個NSMutableDictionary對象,而且設置其初始容量爲10; 和NSMutableArray,NSMutableSet同樣,當存儲的元素達到最大容量以後會自動擴充容量,因此不用擔憂數組越界。

    (2) 往NSMutableDictionary中添加元素

[muDic1 setObject:@"中國" 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 方法能夠往字典中添加元素, 方法的前一個參數爲value,後一個參數爲key。使用循環能夠獲得相應的值。

    (3) 刪除字典中的元素

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

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

    - (void)removeObjectsForKeys:(NSArray *)keyArray;這個方法參數爲一個數組,用於刪除數組中包含的key的全部元素。

[muDic1 removeObjectsForKeys:[NSArray arrayWithObjects:@"ab", nil]];

[muDic1 removeAllObjects];

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

    上面第一句代碼用於從數組中刪除包含的元素,而第二句則用於刪除NSMutableDictionary中的全部元素。最終沒有任何結果輸出。

 

    以上是關於字典的相關內容的簡單介紹,系統提供的方法遠不止這些,仍須要不斷的去努力與實踐,實踐永遠是最有效的方法。

 

    有人問我這學習Object C是要搞iphone開發的節奏啊,其實不是爲了開發iPhone才學習Object C的,只是爲了讓本身還能靜下心來去學習,好在實施過程當中給客戶交流還有扯淡的資本!

相關文章
相關標籤/搜索