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 *[email protected]{@"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);
时间: 2024-10-05 13:35:29

IOS字典NSDictionary与NSMutableDictionary知识点的相关文章

字典NSDictionary以及NSMutableDictionary的用法总结

做过Java语言 或者 C语言 开发的朋友应该很清楚 关键字map 吧,它可以将数据以键值对儿的形式储存起来,取值的时候通过KEY就可以直接拿到对应的值,非常方便.在Objective-C语言中 词典对象就是做这个事情的,不过在同一个词典对象中可以保存多个不同类型的数据,不像Java与C 只能保存声明的相同类型的数据,它的关键字为NSDictionary与NSMutableDictionary.阅读过我之前文章的朋友应该从关键字的 结构就可以看出这两个的区别.很明显前者为不可变词典,或者为可变词

IOS Intro - NSDictionary and NSMutableDictionary

NSDictionary.NSMutableDictionary的基本用法 1.不可变词典NSDictionary 字典初始化 NSNumber *numObj = [NSNumber numberWithInt:100]; 以一个元素初始化 NSDictionary *dic = [NSDictionary dictionaryWithObject:numObj forKey:@"key"]; 初始化两个元素 NSDictionary *dic = [NSDictionary dic

IOS 字典快速转换为Model

一般情况下IOS得局部页面加载的过程是,创建一个Model然后,将Nib文件与Model进行关联,然后能够快速的获取到Nib文件上的控件实例.操作生成页面. 但是原生的内容是没有直接通过Json获取Model只能生成字典.然后转换为Model.下列方法就是通过字典来转换为Model的过程. 将字典转换为Model -(BOOL)reflectDataFromOtherObject:(NSDictionary *)dic { unsigned int outCount, i; objc_prope

IOS开发之旅-IOS常用数据结构NSArray、NSMutableArray、NSDictionary、NSMutableDictionary介绍

NSArray NSArray基本用法 void arrayTest1() { //数组初始化最后必须以nil结尾,表示数组元素结束 NSArray *array1 = [[NSArray alloc]initWithObjects:@"item0",@"item1",@"item2",@"item3",@"item4",nil]; NSLog(@"%@",array1); /*( it

iOS学习路之Objective-C(六)—— NSDictionary和NSMutableDictionary

创建一个不可变的字典 1 //字典中的元素是成对出现的,key-value,key(键,索引),value(值,索引对应的值),两者均是id对象 2 NSDictionary *dictionary = @{@"key":@"value", @"key2":@"value2"}; 3 #if 0 4 #pragma mark 对象方法 5 NSDictionary *dictionary1 = [[NSDictionary a

iOS开发--字典(NSDictionary)和JSON字符串(NSString)之间互转

1. 字典转Json字符串 + (NSString*)convertToJSONData:(id)infoDict { NSError *error; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:infoDict options:NSJSONWritingPrettyPrinted // Pass 0 if you don't care about the readability of the generated stri

iOS/Objective-C开发 字典NSDictionary的深复制(使用category)

目标:把NSDictionary对象转换成NSMutableDictionary对象,对象内容是字符串数组,需要实现完全复制(深复制). 如果调用NSDictionary的mutableCopy方法,可以得到一个NSMutableDictionary对象,但这只是浅复制,如果我们修改NSDictionary中数组内的值(当然,数组必须是NSMutableArray),会发现,NSMutableDictionary对象内数组的值也跟着更改了.我们需要增加一个mutableDeepCopy方法来实现

Objective-C数组 NSArray与NSMutableArray的区别 NSDictionary与 NSMutableDictionary 的区别 == int,NSInteger,NSUIn

Objective-C数组相关操作. // insert code here... NSLog(@"数组"); //指定多个字符串创建数组 NSArray *array; array=[NSArrayarrayWithObjects:@"0-asd",@"1-fds",@"2-哈咯",@"3-个人",nil]; //数组的长度 NSLog(@"数组长度%d",array.count);

【转】NSDictionary以及NSMutableDictionary的用法

原文网址:http://my.oschina.net/u/1245365/blog/177736 摘要 Foundation中的字典是由 键—值 对组成的数据集合.通过key(键),查找对应的value(值),key通常是字符串对象,也可以是其他任意的对象,但key的值必须是唯一的.此外,字典对象的key 和value的值不可以为空(nil),如果要表示一个空值,可以用NSNull对象 1.NSDictionary (不可变字典) 字典的初始化 //一个key - value NSDiction