字典中的元素是以键值对的形式存储的,键值对的键和值,都是任意的对象,但是键往往使用字符串,字典存储对象的地址没有顺序,字典的遍历分为:键的遍历和值的遍历,字典与数组的区别:数组讲究顺序,而字典可以快速帮助我们找到数据,数据是我们的目的,键是我们的手段;其中NSMutableDictionary是NSDictionary的子类,所以其拥有NSDictionary所有的功能;主要是一些常见的操作,别外一些操作见其相应的文档,下面的代码部分还运用的第三方插件BlocksKit相结合;

a:NSDictionary是由键值对(key-value)组成的数据集合
b:键:可以是任何对象 (通常是NSString类型的对象),同时键必须是单值
c:值:可以是任何对象,不能为nil
d:常用方式:我们根据键来查找相应值
e:字典有可变的和不可变的,可变的字典中可动态的添加和删除元素
f:和数组不同,字典是无序的

1:NSDictionary一些常见的操作

//创建词典
NSDictionary *dictionary=[NSDictionary dictionaryWithObjectsAndKeys:@"wujy",@"name",@,@"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":@};
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:@,@,@,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]<?YES:NO;
return select;
}];
NSLog(@"match符合的项为:%@",matchDictionary); //过滤
NSDictionary *selectDictionary=[blockDictionary bk_select:^BOOL(id key, id obj) {
BOOL select=[obj intValue]>?YES:NO;
return select;
}];
NSLog(@"select符合的项为%@",selectDictionary); //反向过滤
NSDictionary *rejectDictionary=[blockDictionary bk_reject:^BOOL(id key, id obj) {
BOOL select=[obj intValue]>?YES:NO;
return select;
}];
NSLog(@"reject符合的项为%@",rejectDictionary); //对各个项进行修改
NSDictionary *mapDictinary=[blockDictionary bk_map:^id(id key, id obj) {
return [NSNumber numberWithInt:[obj intValue]+];
}];
NSLog(@"map修改后的项为%@",mapDictinary); //是否符合条件 返回bool
BOOL isSelected=[blockDictionary bk_any:^BOOL(id key, id obj) {
BOOL select=[obj intValue]>?YES:NO;
return select;
}];
NSLog(@"%d符合条件",isSelected); //判断是否所有的项都符合这个条件
BOOL allSelected=[blockDictionary bk_all:^BOOL(id key, id obj) {
BOOL select=[obj intValue]>?YES:NO;
return select;
}];
NSLog(@"%d符合条件",allSelected); //判断是否所有的项都不符合这个条件
BOOL noneSelected=[blockDictionary bk_none:^BOOL(id key, id obj) {
BOOL select=[obj intValue]>?YES:NO;
return select;
}];
NSLog(@"%d符合条件",noneSelected);

2:NSMutableDictionary一些常见的操作

    //创建一个nsmutabledictionary
NSMutableDictionary *mutableDictionary=[NSMutableDictionary dictionaryWithCapacity:];
[mutableDictionary setObject:@"wujy" forKey:@"name"];
[mutableDictionary setObject:@"cnblogs.com/wujy" forKey:@"webName"];
[mutableDictionary setObject:@ 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":@,@"work":@,@"age":@}];
[newmutableDictionary bk_performSelect:^BOOL(id key, id obj) {
BOOL select=[obj intValue]>?YES:NO;
return select;
}];
NSLog(@"过滤后的可变词典为(29,13)%@",newmutableDictionary); //取反过滤
[newmutableDictionary bk_performReject:^BOOL(id key, id obj) {
BOOL select=[obj intValue]>?YES:NO;
return select;
}];
NSLog(@"取反过滤的可变词典为(13)%@",newmutableDictionary); //修改各个项的结果
[newmutableDictionary bk_performMap:^id(id key, id obj) {
return @([obj intValue]+);
}];
NSLog(@"修改后的可变词典为(14)%@",newmutableDictionary);

最近有个妹子弄的一个关于扩大眼界跟内含的订阅号,每天都会更新一些深度内容,在这里如果你感兴趣也可以关注一下(嘿对美女跟知识感兴趣),当然可以关注后输入:github 会有我的微信号,如果有问题你也可以在那找到我;当然不感兴趣无视此信息;

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

  1. 字典NSDictionary以及NSMutableDictionary的用法总结

    做过Java语言 或者 C语言 开发的朋友应该很清楚 关键字map 吧,它可以将数据以键值对儿的形式储存起来,取值的时候通过KEY就可以直接拿到对应的值,非常方便.在Objective-C语言中 词典 ...

  2. iOS常用 --- NSDictionary 与 NSMutableDictionary

    一.NSDictionary 字典的两种创建方法 NSDictionary *dic1 =[[NSDictionary alloc]init]; 2 // 或: 3 NSDictionary *dic ...

  3. IOS Intro - NSDictionary and NSMutableDictionary

    NSDictionary.NSMutableDictionary的基本用法 1.不可变词典NSDictionary 字典初始化 NSNumber *numObj = [NSNumber numberW ...

  4. iOS - 字典(NSDictionary)

    1. 字典类型的常用处理 //---------------不可变字典 //1.字典的创建 NSArray *array1 = [NSArray arrayWithObjects:@"zha ...

  5. 字典NSDictionary和NSMutableDictionary的使用

    简介:字典是一种数据结构,字典里面的每一个元素,是一个key-value(键值对),key和value都是对象类型.同NSArray一样,里面的对象不用保持一致性. NSDictionary 1.字面 ...

  6. IOS 字典快速转换为Model 模型

    一般情况下IOS得局部页面加载的过程是,创建一个Model然后,将Nib文件与Model进行关联,然后能够快速的获取到Nib文件上的控件实例.操作生成页面. 但是原生的内容是没有直接通过Json获取M ...

  7. iOS - OC NSDictionary 字典

    前言 @interface NSDictionary<__covariant KeyType, __covariant ObjectType> : NSObject <NSCopyi ...

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

    iOS开发--字典(NSDictionary)和JSON字符串(NSString)之间互转 1. 字典转Json字符串 // 字典转json字符串方法 -(NSString *)convertToJs ...

  9. Foundation框架--字典( NSDictionary NSMutableDictionary )

    基础知识 1.字典不允许相同的key,但允许有相同的value. 2,字典是无序的,字典不能排序. 3.字典里的内容是成对存在的,不会出现单数. 4.快速创建的方式只适合不可变字典. 不可变字典 #i ...

随机推荐

  1. MFC设置静态文本框,编辑框等控件背景和字体颜色

    在MFC类库提供了CWnd::OnCtlColor函数,在工作框架的子窗口被重画时将调用该成员函数.因此可以重载WM_CTLCOLOR消息的响应函数.此函数的原型:afx_msg HBRUSH OnC ...

  2. Linux下查看tcp连接数及状态

    netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’ TIME_WAIT 8947FIN_WAIT1 15FIN_W ...

  3. CSS 块状元素和内联元素

    在用CSS布局页面的时候,我们会将HTML标签分成两种,块状元素和内联元素(我们平常用到的div和p就是块状元素,链接标签a就是内联元素) 块状元素一般是其他元素的容器,可容纳内联元素和其他块状元素, ...

  4. WWDC2015 结束.新一波更新以及bug即将来袭.

    WWDC结束.新一波更新以及bug即将来袭. HTTPS 将成为标准链接. http被报错. GamePlayKit 这是搞那样. 还有ReplayKit  那些什么录像分享什么的还有活路么? Mod ...

  5. 求1+2+3+...+n

    求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 卧槽,剑指Offer竟然有这样的题... public ...

  6. EXCEL 数字+E+数字 自动识别为指数形式的解决办法

    1.今天从数据库导出excel表时,出现本来为"2E3"的单元格错误显示为"2.00E+03"的情况 2.而设置 单元格格式 为"文本"后, ...

  7. 6/19 sprint3 看板和燃尽图的更新

  8. Web 前端颜色值--字体--使用,整理整理

    做网页时经常挑选不好颜色吧...多看看颜色值,或者自己配吧.... 颜色值 CSS 颜色使用组合了红绿蓝颜色值 (RGB) 的十六进制 (hex) 表示法进行定义.对光源进行设置的最低值可以是 0(十 ...

  9. P6 EPPM R16.1安装与配置指南(一)

    标题 http://www.cnblogs.com/endv/p/5634620.html 安装与配置指南安装与配置指南(数据库)说明哪些How to set up the P6专业数据库和服务器.a ...

  10. Jcrop简单实用

    今天有一个项目的功能需求 “在上传照片的时候能进行裁剪”,网上找了下,发现有Jcrop这款插件,自己试了下,感觉很不错,蛮好用的.又能增加用户体验,测试了兼容性也很好,所以在这里分享下 首先,可以到官 ...