IOS字典NSDictionary與NSMutableDictionary知識點


 

字典中的元素是以鍵值對的形式存儲的,鍵值對的鍵和值,都是任意的對象,但是鍵往往使用字符串,字典存儲對象的地址沒有順序,字典的遍歷分為:鍵的遍歷和值的遍歷,字典與數組的區別:數組講究順序,而字典可以快速幫助我們找到數據,數據是我們的目的,鍵是我們的手段;其中NSMutableDictionary是NSDictionary的子類,所以其擁有NSDictionary所有的功能;主要是一些常見的操作,別外一些操作見其相應的文檔,下面的代碼部分還運用的第三方插件BlocksKit相結合;

a:NSDictionary是由鍵值對(key-value)組成的數據集合
b:鍵:可以是任何對象 (通常是NSString類型的對象),同時鍵必須是單值
c:值:可以是任何對象,不能為nil
d:常用方式:我們根據鍵來查找相應值
e:字典有可變的和不可變的,可變的字典中可動態的添加和刪除元素
f:和數組不同,字典是無序的

1:NSDictionary一些常見的操作

 

//創建詞典
    NSDictionary *dictionary=[NSDictionary dictionaryWithObjectsAndKeys:@"wujy",@"name",@29,@"age",nil];
    NSInteger Count=[dictionary count];
    NSLog(@"詞典的個數為%ld",Count);
    
    //得到詞典中的所有key
    NSEnumerator *enumeratorkey=[dictionary keyEnumerator];
    for (NSObject *obj in enumeratorkey) {
        NSLog(@"key為:%@",obj);
        NSLog(@"通過key找到value值為:%@",[dictionary objectForKey:obj]);
    }
    
    //得到詞典中的所有value值
    NSEnumerator *enumeratorvalue=[dictionary objectEnumerator];
    for (NSObject *obj in enumeratorvalue) {
        NSLog(@"value為:%@",obj);
    }
    
    //簡便的方式創建 key排前面value排后面
    NSDictionary *newDictionary=@{@"name":@"wujy",@"age":@29};
    NSArray *keyArray=[newDictionary allKeys];
    for (NSObject *obj in keyArray) {
        NSLog(@"key的值為:%@",obj);
    }
    
    NSArray *valueArray=[newDictionary allValues];
    for (NSObject *obj in valueArray) {
        NSLog(@"value的值為:%@",obj);
    }
    
    //blocks插件
    NSDictionary *blockDictionary=[NSDictionary dictionaryWithObjects:[[NSArray alloc] initWithObjects:@3,@15,@29,nil] forKeys:[[NSArray alloc] initWithObjects:@"IOS",@"work",@"age",nil]];
    //遍歷
    [blockDictionary bk_each:^(id key, id obj) {
        NSLog(@"使用blocks的key為:%@",key);
        NSLog(@"對應的value為:%@",obj);
    }];
    
    //過濾 只在第一個符合條件時就停止

NSDictionary *matchDictionary=[blockDictionary bk_match:^BOOL(id key, id obj) {
 BOOL select=[obj intValue]<10?YES:NO; return select; }]; NSLog(@"match符合的項為:%@",matchDictionary); //過濾
    NSDictionary *selectDictionary=[blockDictionary bk_select:^BOOL(id key, id obj) { BOOL select=[obj intValue]>10?YES:NO; return select; }]; NSLog(@"select符合的項為%@",selectDictionary); //反向過濾
    NSDictionary *rejectDictionary=[blockDictionary bk_reject:^BOOL(id key, id obj) { BOOL select=[obj intValue]>10?YES:NO; return select; }]; NSLog(@"reject符合的項為%@",rejectDictionary); //對各個項進行修改
    NSDictionary *mapDictinary=[blockDictionary bk_map:^id(id key, id obj) { return [NSNumber numberWithInt:[obj intValue]+1]; }]; NSLog(@"map修改后的項為%@",mapDictinary); //是否符合條件 返回bool
    BOOL isSelected=[blockDictionary bk_any:^BOOL(id key, id obj) { BOOL select=[obj intValue]>20?YES:NO; return select; }]; NSLog(@"%d符合條件",isSelected); //判斷是否所有的項都符合這個條件
    BOOL allSelected=[blockDictionary bk_all:^BOOL(id key, id obj) { BOOL select=[obj intValue]>20?YES:NO; return select; }]; NSLog(@"%d符合條件",allSelected); //判斷是否所有的項都不符合這個條件
    BOOL noneSelected=[blockDictionary bk_none:^BOOL(id key, id obj) { BOOL select=[obj intValue]>50?YES:NO; return select; }]; NSLog(@"%d符合條件",noneSelected);

 

2:NSMutableDictionary一些常見的操作

    //創建一個nsmutabledictionary
    NSMutableDictionary *mutableDictionary=[NSMutableDictionary dictionaryWithCapacity:3];
    [mutableDictionary setObject:@"wujy" forKey:@"name"];
    [mutableDictionary setObject:@"cnblogs.com/wujy" forKey:@"webName"];
    [mutableDictionary setObject:@29 forKey:@"age"];
    
    //得到詞典中的所有key
    NSEnumerator *enumeratorkey=[mutableDictionary keyEnumerator];
    for (NSObject *obj in enumeratorkey) {
        NSLog(@"key為:%@",obj);
        NSLog(@"通過key找到value值為:%@",[mutableDictionary objectForKey:obj]);
    }
    
    //刪除其中一個key
    [mutableDictionary removeObjectForKey:@"name"];
    NSLog(@"刪除name的key以后值:%@",mutableDictionary);
    
    [mutableDictionary removeAllObjects];
    NSLog(@"刪除所有以后,可變詞典個數為%ld",[mutableDictionary count]);
    
    //blocks
    //過濾
    NSMutableDictionary *newmutableDictionary=[NSMutableDictionary dictionaryWithDictionary:@{@"IOS":@3,@"work":@13,@"age":@29}];
    [newmutableDictionary bk_performSelect:^BOOL(id key, id obj) {
        BOOL select=[obj intValue]>10?YES:NO;
        return select;
    }];
    NSLog(@"過濾后的可變詞典為(29,13)%@",newmutableDictionary);
    
    //取反過濾
    [newmutableDictionary bk_performReject:^BOOL(id key, id obj) {
        BOOL select=[obj intValue]>20?YES:NO;
        return select;
    }];
    NSLog(@"取反過濾的可變詞典為(13)%@",newmutableDictionary);
    
    //修改各個項的結果
    [newmutableDictionary bk_performMap:^id(id key, id obj) {
        return @([obj intValue]+1);
    }];
    NSLog(@"修改后的可變詞典為(14)%@",newmutableDictionary);

 

 

最近有個妹子弄的一個關於擴大眼界跟內含的訂閱號,每天都會更新一些深度內容,在這里如果你感興趣也可以關注一下(嘿對美女跟知識感興趣),當然可以關注后輸入:github 會有我的微信號,如果有問題你也可以在那找到我;當然不感興趣無視此信息;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM