天天看點

OC學習日記09-字典字典

字典

OC學習日記09-字典字典

前言

字典其實在了解了數組之上去看的話,是非常容易的。數組是一個一個數出現的,而字典是一對一對“數”出現的,這個“一對數”就是鍵值對。但是我們要注意,字典是集合,集合是無序的。而其實還有一個類型叫set集合,它也是無序的,因為它是單值無重複的集合。而且他們都有可變和不可變之分,我們把字元串、數組、字典還有set集合一起對比着學,就會容易記住了。

不可變字典 NSDictionary

1.概念:

字典是關鍵字“key”及其定義的值(value)所構成的集合,即它是由key-value組成的鍵值對的集合。‘key’一般是‘NSString’類型的,‘value’是OC中任意對象。對于字典來講,我們就是通過‘key’來通路‘value’。
           

2.為什麼在有了數組之後,還需要字典?

在有大量的資料或頻繁的查找的時候,使用字典效率更高。因為字典采用鍵查詢的優化查詢方式。
           

初始化

建立一個空的字典

NSDictionary *dictionary1=[[NSDictionary alloc]init];
        NSDictionary *dictionary2=[NSDictionary dictionary];
        NSDictionary *dictionary3=[NSDictionary dictionaryWithObject:@"Rick" forKey:@"name"];
           

建立一個多個鍵值對的字典

NSDictionary *dictionary4=[NSDictionary dictionaryWithObjectsAndKeys:@"Rick",@"name",@,@"age",@"G2",@"address",nil];
           

字典裡面存放的元素都要是對象類型才可以,如果是基本資料類型,要先把基本資料類型進行封裝,然後再放到這些集合中去。

NSDictionary *dictionary5=[NSDictionary dictionaryWithDictionary:dictionary4];
    NSLog(@"%@",dictionary5);
           

新文法建立字典

NSDictionary *[email protected]{};
           

新文法建立隻有一個鍵值對的字典。

NSDictionary *[email protected]{@"name":@"Rick"};
           

新文法建立隻有一個鍵值對的字典。

NSDictionary *[email protected]{@"name":@"Rick",@"age":@25,@"address":@"G2p"};
           

從本地讀取字典

NSDictionary *dictionary9=[NSDictionary dictionaryWithContentsOfFile:@""];
           

從網絡讀取字典

NSDictionary *dictionary10=[NSDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@"www.baidu.com"]];
           

字典中鍵值對的數量

NSUInteger count=[dictionary4 count];
           

如何通路字典?

通過key通路字型中對應的值

NSString *name=[dictionary4 objectForKey:@"name"];
           

新文法

NSString *newname= dictionary4[@"name"];
           

如何通路字典中的key/value

表示字典中所有的key

NSArray *keysArray=dictionary4.allKeys;
        NSArray *valuesArray=dictionary4.allValues;
        for (int i=; i<dictionary4.count; i++) {
            NSLog(@"%@ = %@",keysArray[i],valuesArray[i]);
        }

        //forin
        for (NSString *key in keysArray) {
            NSLog(@"%@ = %@",key,dictionary4[key]);
        }
           

使用枚舉器周遊

NSEnumerator *enumerator =[keysArray objectEnumerator];
        id key;
        while(key = [enumerator nextObject]){
            NSLog(@"%@ =%@",key,dictionary4[key]);
        }
        NSDictionary *[email protected]{@"name":@"Rick",@"age":@,@"address":@"G2p" ,@"name":@"Jack"};
        for (NSString *str in dictionary.allKeys) {
            NSLog(@"%@ = %@",str,dictionary[str]);
        }
           

可變字典 NSMutableDictionary

1.初始化

建立一個空的字典

NSMutableDictionary *mDictionary1 =[NSMutableDictionary dictionary];
           

建立一個有一個鍵值對的可變字典

NSMutableDictionary *mDictionary2=[NSMutableDictionary dictionaryWithObject:@"Rick" forKey:@"name"];
        NSMutableDictionary *mDictionary3=[NSMutableDictionary dictionaryWithObjectsAndKeys:@"Rick",@"name",@,@"age",@"GZ",@"address", nil];
           

通過一個字典建立一個字典

NSMutableDictionary *mDictionary4=[NSMutableDictionary dictionaryWithDictionary:mDictionary3];

        //mDictionary4.allKeys
        //mDictionary4.allValues
           

可變字典獨有的初始化方法

NSMutableDictionary *mDictionary5=[NSMutableDictionary dictionaryWithCapacity:];
           

從本地讀取字典

NSMutableDictionary *mDictionary6=[NSMutableDictionary dictionaryWithContentsOfFile:@""];
           

從網絡讀取字典

NSMutableDictionary *mDictionary7=[NSMutableDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@"www.baidu.com"]];
           

操作字典

[mDictionary5 setValue:@"Rick" forKey:@"name"];
        [mDictionary5 setValue:@ forKey:@"age"];
           

(如果原來的字典中已經有了akey這個值,那麼這次新加的值就會覆寫原來的關鍵字(鍵)akey對應的值。還是一樣的指令,後面的值會把前面的覆寫掉)

[mDictionary5 setValue:@"Jack" forKey:@"name"];
        mDictionary5[@"name"][email protected]"Leo";
           

删除

删除指定key的對象

[mDictionary5 removeObjectForKey:@"name"];
           

删除所有的對象

[mDictionary5 removeAllObjects];
           

找出相同值的鍵

NSMutableDictionary *mDic8=[NSMutableDictionary dictionaryWithObjectsAndKeys:@"Rick",@"name",
                                    @,@"age",
                                    @"GZ",@"address",
                                    @"Rick",@"name2",
                                    @"Rick",@"name3",nil];
        NSArray *keysArray=mDic8.allKeys;
        NSArray *valuesArray=mDic8.allValues;
           

方法一

for(int i=;i<mDic8.count;i++){
            if(valuesArray[] ==valuesArray[i]){
                NSLog(@"%@",keysArray[i]);
            }
            if([valuesArray[i] isKindOfClass:[NSNumber class]]){
                int age=[valuesArray[i] intValue];
                mDic8[@"name"]=[NSString stringWithFormat:@"%d",age];
            }
        }
           

方法二

for (NSString *key in keysArray) {
            NSString *string;
            if([mDic8[key] isKindOfClass:[NSNumber class]]){
                int age=[mDic8[key] intValue];
                mDic8[key]=[NSString stringWithFormat:@"%d",age];
            }
            else{
                string =mDic8[key];
            }
            if([string isEqualToString:@"Rick"]){
                NSLog(@"");
            }
        }
           
OC學習日記09-字典字典