zoukankan      html  css  js  c++  java
  • 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 会有我的微信号,如果有问题你也可以在那找到我;当然不感兴趣无视此信息;

  • 相关阅读:
    “双一流”建设学科名单
    “双一流”建设高校名单
    vue项目上传Github预览
    vue数据绑定源码
    构建工具是如何用 node 操作 html/js/css/md 文件的
    prop 和 attr 中一些羞羞的事情
    用element-ui的走马灯carousel轻松实现自适应全屏banner图
    Vue实例方法之事件的实现
    初学微信小程序 TodoList
    一个页面从输入URL到加载显示完成,发生了什么?
  • 原文地址:https://www.cnblogs.com/wujy/p/4653804.html
Copyright © 2011-2022 走看看