字典類(十一)

來源:互聯網
上載者:User

標籤:

字典類

索引值對: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];

字典類(十一)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.