標籤:
字典類
索引值對:key-value
索引值對,用一個比喻來說,就是有一堆雜亂的,無序的貨物,要怎麼樣去找到某個貨物,並把貨物拿出來。那麼這裡就要用標籤去給貨物貼上,這樣就能在這堆貨物裡,通過標籤,找到自己想要的貨物了。
索引值對就是類似於這樣的存在,我們用一個鍵key來儲存名字,用value來儲存實際的值,這樣就可以直接通過這個key來取到這個值value。
key相當於貨物的標籤,value相當於實際的貨物。
注意:一堆資料裡,key不能重複。
不可變字典NSDictionary:
字典是用來儲存具有key-value這樣關係的資料的集合的容器。在字典裡,key的值在oc裡寫的時候,可以寫重複,但是,在存入對象的時候,相同的key只儲存第一個。(嚴格來說,key的值不能重複)。NSDictionary一旦建立,就不可以修改,不能添加,不能刪除,只能通過key來讀取value的值。
字典的存放順序,不是按照個人的意願進行存放的。而是按照hash演算法算出來的值,然後存放的。
字典的建立:initWithObjectsAndKeys
//2015年04月17日11:16:18 北京 //字典 //索引值對:(key-value) //key(鍵):相當於貼在貨物上得標籤 //value(值):相當於貨物 //通過標籤找貨物相當於通過key找到value //NSDictionary(不可變字典) //value可以重複 //key不能重複(寫成重複可以,但是不能存進字典) //根據雜湊(hash)算出來的值的順序存放的。 NSDictionary *dict1 = [[NSDictionary alloc]initWithObjectsAndKeys:@"value_hello world",@"key_A", @"value_this is a place put value",@"key_B",@"value_Biger then Bigger",@"B",@"CCC",@"C",nil];//以nil作為結束標誌 NSLog(@"%@",dict1);/* 2015-04-17 11:30:36.976 OCLesson5_字典[1168:55441] { B = "value_Biger then Bigger"; C = CCC; "key_A" = "value_hello world"; "key_B" = "value_this is a place put value"; } */ //A:1,B:2,C:3,D:4 NSDictionary *dict2 = [NSDictionary dictionaryWithObjectsAndKeys:@"1",@"A",@"2",@"B",@"3",@"C",@"4",@"D", nil]; NSLog(@"%@",dict2);/* 2015-04-17 11:35:28.484 OCLesson5_字典[1199:56836] { A = 1; B = 2; C = 3; D = 4; } */ |
initWithObjectsAndKeys這個方法是其中一個初始化字典的方法,這個方法在初始化的時候,按一對存取,前邊是value,後邊是key。以nil作為結束標誌。
兩個數組建立一個字典:dictionaryWithObjects forKeys
這個其實是調用了便利構造器。dictionaryWithObjects這個方法,參數有兩個,前邊參數是放value得數組,後邊的參數是放key的數組。
//兩個數組建立一個字典 NSArray *valueArr = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4", nil]; NSArray *keyArr = [NSArray arrayWithObjects:@"A",@"B",@"C",@"D", nil]; NSDictionary *dict3 = [NSDictionary dictionaryWithObjects:valueArr forKeys:keyArr]; NSLog(@"%@",dict3);/* 2015-04-17 11:42:01.087 OCLesson5_字典[1238:58650] { A = 1; B = 2; C = 3; D = 4; } */ |
通過key取值:
//兩個數組建立一個字典 NSArray *valueArr = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4", nil]; NSArray *keyArr = [NSArray arrayWithObjects:@"A",@"B",@"C",@"D", nil]; NSDictionary *dict3 = [NSDictionary dictionaryWithObjects:valueArr forKeys:keyArr]; //通過key取值 (key的value值) NSString *s1 = [dict3 objectForKey:@"C"]; NSLog(@"%@",s1);//2015-04-17 11:44:54.895 OCLesson5_字典[1254:59540] 3 |
count:計算索引值對個數
//count說的是索引值對的個數,不是key有多少個,value有多少個。 NSUInteger u1 = [dict3 count]; NSLog(@"%lu",u1);//2015-04-17 11:46:50.807 OCLesson5_字典[1268:60069] 4 |
擷取所有key,擷取所有value
//擷取所有的key,返回一個數組,裡邊是所有的key NSArray *keysArr = [dict3 allKeys]; //擷取所有的value,返回一個數組,裡邊是所有的value NSArray *valuesArr = [dict3 allValues]; NSLog(@"%@",keysArr);/*2015-04-17 11:51:31.940 OCLesson5_字典[1289:61531] ( A, D, B, C )*/ NSLog(@"%@",valuesArr);/*2015-04-17 11:51:31.940 OCLesson5_字典[1289:61531] ( 1, 4, 2, 3 ) */ |
注意:
1、字典與數組一樣,不能存標量(基礎資料型別 (Elementary Data Type)資料),只能通過NSNumber來把基礎資料型別 (Elementary Data Type)轉換成對象,才能存進字典。
2、字典中得所有key不能重複。
3、字典的key是id類型(任意類型(前提是遵守NSCopying協議)),value也是id類型。
4、遵守NSCopying協議
5、不要考慮存放順序的問題。
一個練習:
列印所有value的值:(1、allValues 2、allKeys + objectForKey)
//練習:dict3列印所有的value值(2種方式) NSArray *temp1 = [dict3 allValues]; for (int i = 0; i < [temp1 count]; i++) { NSLog(@"%@",temp1[i]); } NSArray *temp2 = [dict3 allKeys]; for (int i = 0; i < [temp2 count]; i++) { NSLog(@"%@",[dict3 objectForKey:temp2[i]]); } |
可變字典NSMutableDictionary
初始化用init即可
NSMutableDictionary *mdict1 = [[NSMutableDictionary alloc]init]; |
設定字典:(字典的添加用set,數組用add)
//設定 [mdict1 setObject:@"apple" forKey:@"T1"]; [mdict1 setObject:@"蘋果" forKey:@"T2"]; NSLog(@"%@",mdict1);/* 2015-04-17 14:55:50.335 OCLesson5_字典[1615:87301] { T1 = apple; T2 = "\U82f9\U679c"; } */ |
刪除字典:
[mdict1 removeObjectForKey:@"T1"]; NSLog(@"%@",mdict1);/* 2015-04-17 14:56:44.512 OCLesson5_字典[1625:87641] { T2 = "\U82f9\U679c"; } */ |
修改字典:
//改 [mdict1 setObject:@"banana" forKey:@"T2"]; NSLog(@"%@",mdict1);/* 2015-04-17 14:58:59.068 OCLesson5_字典[1639:88252] { T2 = banana; } */ |
取值:
//查 [mdict1 objectForKey:@"T2"]; |
清空字典:
//清空字典 [mdict1 removeAllObjects]; |
字典類(十一)