Objective-C语法之NSDictionary和NSMutableDictionary
Java 有Map,可以把数据以键值对的形式储存起来,取值的时候通过key就可以直接拿到对应的值,方便快捷。在Objective-C语言中,词典就是做这样的事情的,和NSArray一样,一个词典对象也能保存不同类型的值,词典也分别有不可变词典和可变的词典(NSDictionary与 NSMutableDictionary),前者是线程安全的,后者不是。
PS:跟数组的区别是:词典乱序存储数据,例如通过[词典对象实例 allKeys]获取的数组对象实例是乱序的,这时需要通过[数组对象实例 sortedArrayUsingComparator:自定义排序比较器]来进一步自定义排序。
1、不可变词典NSDictionary的主要用法:
[NSDictionary dictionaryWithObjectsAndKeys:..] : 使用键值对直接创建词典对象,结尾必需使用nil标志结束。
[dictionary count]: 得到词典的键值对数量。
[dictionary keyEnumerator]: 将词典的所有key储存在NSEnumerator中,乱序;类似于Java语言中的迭代器。
[dictionary objectEnumerator]: 将词典的所有value储存在NSEnumerator中;乱序。
[dictionary objectForKey:key]: 通过传入key对象可以拿到当前key对应储存的值。
2、可变的词典NSMutableDictionary。
NSMutableDictionary是NSDictionary的子类,所以继承了NSDictionary的方法, 以上的代码对NSMutableDictionary来说完全可用。我们试试不一样的地方
增删键值数据。
[dictionary setObject: forKey:] :向可变的词典动态的添加数据
[dictionary removeAllObjects..] : 删除掉词典中的所有数据。
[dictionary removeObjectForKey..] :删除掉词典中指定key的数据
代码示例:
main.m
#import <Foundation/Foundation.h>
/**
NSDictionary 不可变词典,NSEnumerator对应的Value(objectEnumerator)/Key(keyEnumerator)枚举器是乱序的
*/
void testDictionary() {
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"某某人", @"ChineseName", @"KK", @"EnglishName", @"", @"Age", nil]; //Value and Key, don't ignore match case
NSLog(@"[dictionary count]=%d", (int)[dictionary count]); NSEnumerator *enumeratorKey = [dictionary keyEnumerator];
for (NSObject *obj in enumeratorKey) {
NSLog(@"dictionary Key=%@, Value=%@", obj, [dictionary objectForKey:obj]);
} NSEnumerator *enumeratorValue = [dictionary objectEnumerator];
for (NSObject *obj in enumeratorValue) {
NSLog(@"dictionary Value=%@", obj);
} //进行根据Key的降序排序
NSArray *array = [dictionary allKeys];
array = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [obj1 compare:obj2] == NSOrderedDescending; //obj1是从最后的数组元素开始;最终结果是A-Z,1-9;相当于实际的升序排序
}];
for (NSObject *obj in array) {
NSLog(@"dictionary Key=%@, Value=%@", obj, [dictionary objectForKey:obj]);
}
}
/**
NSMutableDictionary 可变词典,NSEnumerator对应的Value(objectEnumerator)/Key(keyEnumerator)枚举器是乱序的
*/
void testMutableDictionary() {
NSMutableDictionary *dictionary2 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"某某人", @"ChineseName", @"KK", @"EnglishName", @"", @"Age", nil]; //Value and Key, don't ignore match case
[dictionary2 setObject:@"Male" forKey:@"Gender"];
NSLog(@"[dictionary2 count]=%d", (int)[dictionary2 count]); NSEnumerator *enumeratorKey = [dictionary2 keyEnumerator];
for (NSObject *obj in enumeratorKey) {
NSLog(@"dictionary2 Key=%@, Value=%@", obj, [dictionary2 objectForKey:obj]);
} NSEnumerator *enumeratorValue = [dictionary2 objectEnumerator];
for (NSObject *obj in enumeratorValue) {
NSLog(@"dictionary2 Value=%@", obj);
} [dictionary2 removeObjectForKey:@"EnglishName"];
NSLog(@"[dictionary2 count]=%d, after the operation of removeObjectForKey", (int)[dictionary2 count]); [dictionary2 removeAllObjects];
NSLog(@"[dictionary2 count]=%d, after the operation of removeAllObjects", (int)[dictionary2 count]);
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
testDictionary(); testMutableDictionary();
}
return ;
}
结果:
-- ::41.146 OCNSDictionary[:] [dictionary count]=
-- ::41.150 OCNSDictionary[:] dictionary Key=EnglishName, Value=KK
-- ::41.150 OCNSDictionary[:] dictionary Key=Age, Value=
-- ::41.150 OCNSDictionary[:] dictionary Key=ChineseName, Value=某某人
-- ::41.150 OCNSDictionary[:] dictionary Value=KK
-- ::41.151 OCNSDictionary[:] dictionary Value=
-- ::41.151 OCNSDictionary[:] dictionary Value=某某人
-- ::41.151 OCNSDictionary[:] dictionary Key=Age, Value=
-- ::41.151 OCNSDictionary[:] dictionary Key=ChineseName, Value=某某人
-- ::41.151 OCNSDictionary[:] dictionary Key=EnglishName, Value=KK
-- ::41.151 OCNSDictionary[:] [dictionary2 count]=
-- ::41.151 OCNSDictionary[:] dictionary2 Key=Age, Value=
-- ::41.151 OCNSDictionary[:] dictionary2 Key=Gender, Value=Male
-- ::41.151 OCNSDictionary[:] dictionary2 Key=EnglishName, Value=KK
-- ::41.152 OCNSDictionary[:] dictionary2 Key=ChineseName, Value=某某人
-- ::41.158 OCNSDictionary[:] dictionary2 Value=
-- ::41.159 OCNSDictionary[:] dictionary2 Value=Male
-- ::41.159 OCNSDictionary[:] dictionary2 Value=KK
-- ::41.159 OCNSDictionary[:] dictionary2 Value=某某人
-- ::41.160 OCNSDictionary[:] [dictionary2 count]=, after the operation of removeObjectForKey
-- ::41.160 OCNSDictionary[:] [dictionary2 count]=, after the operation of removeAllObjects
Objective-C语法之NSDictionary和NSMutableDictionary的更多相关文章
- 词典对象 NSDictionary与NSMutableDictionary
做过Java语言或者 C语言开发的朋友应该很清楚关键字map 吧,它可以将数据以键值对儿的形式储存起来,取值的时候通过KEY就可以直接拿到对应的值,非常方便,是一种非常常用的数据结构.在Objecti ...
- 字典NSDictionary以及NSMutableDictionary的用法总结
做过Java语言 或者 C语言 开发的朋友应该很清楚 关键字map 吧,它可以将数据以键值对儿的形式储存起来,取值的时候通过KEY就可以直接拿到对应的值,非常方便.在Objective-C语言中 词典 ...
- 黑马程序员-NSDictionary和NSMutableDictionary
NSDictionary和NSMutableDictionary:通过key和value进行对应,进行存储元素,能够方便提取所需的元素.key是不能够重复出现,但是value能够重复出现.NSDict ...
- NSDictionary、NSMutableDictionary的基本用法
NSDictionary.NSMutableDictionary的基本用法 1.不可变词典NSDictionary 字典初始化 NSNumber *numObj = [NSNumber numberW ...
- (转载)目前最细致清晰的NSDictionary以及NSMutableDictionary用法总结
文章转载自:http://www.cnblogs.com/wengzilin/archive/2012/03/15/2397712.html 做过Java语言 或者 C语言 开发的朋友应该很清楚 关键 ...
- 【转】目前最细致清晰的NSDictionary以及NSMutableDictionary用法总结 -- 不错
原文网址:http://www.cnblogs.com/wengzilin/archive/2012/03/15/2397712.html 做过Java语言 或者 C语言 开发的朋友应该很清楚 关键字 ...
- IOS Intro - NSDictionary and NSMutableDictionary
NSDictionary.NSMutableDictionary的基本用法 1.不可变词典NSDictionary 字典初始化 NSNumber *numObj = [NSNumber numberW ...
- 词典对象(NSDictionary和NSMutableDictionary)
词典(dictionary)顾名思义就是同由键-值组成的数据集合.与在词典中查找单词定义一样,可以通过对象的键从词典中获取需要的对象,看到 这里,你是不是想起了java中的map?和NSArray一样 ...
- [Objective-C] 009_Foundation框架之NSDictionary与NSMutableDictionary
在Cocoa Foundation中NSDictionary和NSMutableDictionary 用于对象有序集合,NSDictionary和NSMutableDictionary 与 NSArr ...
随机推荐
- Eigen教程(8)
整理下Eigen库的教程,参考:http://eigen.tuxfamily.org/dox/index.html 原生缓存的接口:Map类 这篇将解释Eigen如何与原生raw C/C++ 数组混合 ...
- [转]mysql写注释的几种方法
原文地址:https://www.cnblogs.com/JiangLe/p/6897403.html MySQL的注释风格总的来说有三种.它们分别是 1.单行注释可以用"#" s ...
- <买基金为自己加薪>读书笔记
定时定额买基金跟买股票不同,到达停利点就应该不要恋战,将获利连同本金转入再投资,才能达到定时定额的复利效果 傻傻地买,聪明地卖 不在乎过程,只在乎结果 不懂的东西不要随便碰,在对一种投资工具有基本认识 ...
- Go Revel - Controllers(控制器)
Controller(控制器)整个revel都是围绕它处理所有请求 控制器可以是任何直接或间接内嵌了`*revel.Controller`类型的结构,如: type AppController str ...
- 利用python的KMeans和PCA包实现聚类算法
题目: 通过给出的驾驶员行为数据(trip.csv),对驾驶员不同时段的驾驶类型进行聚类,聚成普通驾驶类型,激进类型和超冷静型3类 . 利用Python的scikit-learn包中的Kmeans算法 ...
- DataTable 行删除
今天在阅读一个项目中的代码时,发现删除DataTable的数据时用的dataTable.Clear(); 由于以前自己习惯都是用dataTable.Rows.Clear();因此突然感觉到很茫然,难道 ...
- FileTable使用总结
sqlsever2012以后才开始支持FileTable,具体的FileTable的介绍可以参考微软的官网 http://msdn.microsoft.com/zh-cn/library/gg5090 ...
- 浏览器自己主动填表安全漏洞:查看浏览器保存的password
我通常会使用浏览器保存自己的帐号和password,下次登录就无需又一次输入,很方便.而像傲游这种浏览器还提供了自己主动同步功能,让我一个傲游帐号.就带着互联网上全部帐号password去旅行. 昨天 ...
- background-size 导致的背景不居中问题
1. 理想中的效果是这样的 2. 然后想改一下圆圈的大小 3. 容器大小为偶数,图片大小为奇数,就会使图片并不真正居中,如果仔细量一下,会发现图片上面比下面多1px! 貌似只有 backgro ...
- 获取checkbox的选中的值
var arr = new Array(); var idsObj = $("input [name='ids']"); for(var i=0;i<idsObj.lengt ...