objective-c系列-NSDictionary&NSMutableDictionary
*********************************************
NSDictionary
*********************************************
// 字典的概念:
// 键值对的概念:
// 查字典时: 用一个键,得到一个值
字典的构造方法:
NSDictionary * dict1 = [[NSDictionary alloc]initWithObjectsAndKeys:@"one",@"1",@"two",@"2",@"three",@"3", nil];
NSLog(@"dict1: %@", dict1);
// 字典的字面常量对象:
// 1, 1,3, "abc", @"abc", @[@"abc",@""] @{@"key":@"value",@"k2":@"v2"}
// NSDictionary * dict2 = @{@"1":@"one",@"2":@"two",@"3":@"three"};
#define DICT @{@"1":@"one",@"2":@"two",@"3":@"three"}
NSDictionary * dict2 = DICT;//DICT是一个宏
NSLog(@"dict2: %@",dict2);
NSDictionary * dict3 = [[ NSDictionary alloc]initWithDictionary:dict2];
NSLog(@"dict3: %@", dict3);
NSArray * keys =@[@"key1",@"key2",@"key3"];
NSArray * values =@[@"value1",@"value2",@"value3"];
NSDictionary * dict4 = [[ NSDictionary alloc]initWithObjects:values forKeys:keys];
NSLog(@"dict4: %@", dict4);
*********************************************
//根据键查值
NSDictionary * dict1 = @{@"1":@"one",@"2":@"two",@"3":@"three"};
NSString * key = @"1";
// 根据一个键,得到一个值,如果字典中没有这个键值对,则objectForKey:这个方法返回一个nil
NSString *value = [dict1 objectForKey:key];
NSString *value2 = dict1[key];
NSString *value3 = dict1[@"2"];
//从终端获取一个key,得到一个值
char buf[128];
// fgets 和 gets的区别:
// gets:从终端的输入缓冲区不断地获取字符存入buf,直到遇到回车符结束,
// 但是最后的那个回车符不会存入buf,只会往buf后边补一个'\0'
// -> abc\n buf: abc\0
// fgets(buf, 122, stdin): 从终端的输入缓冲区不断地获取字符,但最多只能获取122个字符,如果不够122个字符时就遇到了回车符,那么回车符也
// 会放入buf, 且在回车符后边再补一个'\0'
// -> abc\n buf: abc\n\0
while (1) {
NSLog(@"请输入一个key:");
#if 0
fgets(buf, 122, stdin);
buf[strlen(buf)-1]='\0';
#else
gets(buf);
#endif
NSString *inputKey = [NSString stringWithUTF8String:buf];
NSString * getValue = [dict1 objectForKey:inputKey];
NSLog(@"值为: %@", getValue);
}
*********************************************
//遍历字典
NSDictionary * dict1 = @{@"33":@"three",@"1":@"one",@"2":@"two",@"3":@"three"};
// 获取字典所有的键
NSArray *keys=[dict1 allKeys];
// 获取字典所有的值
NSArray *values = [dict1 allValues];
id key;
//快速遍历字典的所有键
for(key in dict1)
{
NSLog(@"key: %@",key);
NSLog(@"value: %@", dict1[key]);
}
//注意: 从字典获取的枚举器枚举的是字典的所有值,而不是键
NSEnumerator *enumerator = [dict1 objectEnumerator];
id obj;
while (obj=[enumerator nextObject])
{
NSLog(@"obj: %@", obj);
//注意:词典中:值可以相同,但键不能相同,即一个值可以有多个键
NSArray * keysOfObj= [dict1 allKeysForObject:obj];
NSLog(@"某个值对应的所有键为:%@",keysOfObj);
}
*********************************************
// 其他方法:
//1, 获取字典的键值对数量
NSDictionary * dict1 = DICT;
NSUInteger count = [dict1 count];
NSLog(@"字典一共有%lu个键值对", count);
*********************************************
*********************************************
NSMutableDictionary
*********************************************
可变字典的构造方法:
//构造一个空字典
NSMutableDictionary *mdict = [NSMutableDictionary dictionary];
NSMutableDictionary *mdict1=[[NSMutableDictionary alloc]init];
NSMutableDictionary * mdict2 = [[NSMutableDictionary alloc]initWithObjectsAndKeys:@"v1",@"k1",@"v2",@"k2", nil];
NSMutableDictionary * mdict3 = [[ NSMutableDictionary alloc]initWithObjects:@[@"vx1",@"vx2",@"vx3"] forKeys:@[@"kx1",@"kx2",@"kx3"]];
*********************************************
添加键值对:
NSMutableDictionary *mdict1=[[NSMutableDictionary alloc]init];
[mdict1 setObject:@"setV1" forKey:@"setK1"];
[mdict1 setObject:@"setV1" forKey:@"setK2"];
NSLog(@"mdict1: %@", mdict1);
NSLog(@"两个值的地址分别为:%p %p", mdict1[@"setK1"], mdict1[@"setK2"]);
NSLog(@"两个abc的地址分别为: %p %p", @"abc", @"abc");
*********************************************
修改键值对:
NSMutableDictionary * mdict1 = [[NSMutableDictionary alloc]initWithObjectsAndKeys:@"v1",@"k1",@"v2",@"k2", nil];
//现在时刻,mdict1 : k1=v1 k2=v2
// 修改某一个键对应的值, 让键 k2的值不再是 v2
[mdict1 setObject:@"this is newValue for k2" forKey:@"k2"];
NSLog(@"mdict1: %@", mdict1);
*********************************************
删除键值对:
NSMutableDictionary * mdict2 = [[NSMutableDictionary alloc]initWithObjectsAndKeys:@"v1",@"k1",@"v2",@"k2",@"v3",@"k3", @"v5",@"k5",@"v6",@"k6",nil];
NSLog(@"原始字典: mdict2: %@", mdict2);
//删除一个键值对,需要传入一个键
[mdict2 removeObjectForKey:@"k2"];
NSLog(@"删除一个键对应的键值对后:mdict2: %@", mdict2);
//删除一组键对应的键值对, 传入一个键的数组
[mdict2 removeObjectsForKeys:@[@"k5",@"k6"]];
NSLog(@"删除一组键对应的键值对后:mdict2: %@", mdict2);
//重置字典,即原来的所有键值对无效了。
[mdict2 setDictionary:@{@"newKey1":@"newValue1",@"newKey2":@"newValue2"}];
//删除所有键值对
[mdict2 removeAllObjects];
NSLog(@"删除所有键值对后:mdict2: %@", mdict2);
*********************************************
*********************************************
*********************************************
objective-c系列-NSDictionary&NSMutableDictionary的更多相关文章
- 黑马程序员——OC语言Foundation框架 (2) NSArray NSSet NSDictionary\NSMutableDictionary
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)NSArray 1>NSArray :不可变数组 ①创建方法 ...
- 关于NSString,NSMutableString,NSArray,NSMutableArray,NSDictionary,NSMutableDictionary
NSString,NSMutableString,NSArray,NSMutableArray,NSDictionary,NSMutableDictionary 在 OC 中我们天天都要用,而我们要怎 ...
- Object-c学习之路九(字典(NSDictionary&NSMutableDictionary))
字典的练习和使用(遍历,搜索...)(Student和Book类文件可以查看上篇博客这次不上传了.) // // main.m // NSDictionary // // Created by Wil ...
- NSDictionary NSMutableDictionary NSSet NSMutableSet
//description只是返回了一个字符串 // [person description]; // //如果想要打印需要NSLog // NSLog(@"%@& ...
- NSDictionary , NSMutableDictionary, NSMutableDictionary 和 NSMutableSet)相当于java的map、set
1 NSDictionary 和 NSMutableDictionary NSDictionary :就是java中的map; 放入对象是键值对 key-value , 同样 秉持了一样的原则,只 ...
- NSArray,NSMutable和NSSet,NSMutableSet和NSDictionary,NSMutableDictionary用法
开始编写应用程序的代码时,可以利用大量的 Objective-C 框架.其中,为所有应用程序提供基本服务的 Foundation 框架尤为重要.Foundation 框架包括表示基本数据类型的值类(如 ...
- Foundation框架--字典( NSDictionary NSMutableDictionary )
基础知识 1.字典不允许相同的key,但允许有相同的value. 2,字典是无序的,字典不能排序. 3.字典里的内容是成对存在的,不会出现单数. 4.快速创建的方式只适合不可变字典. 不可变字典 #i ...
- 黑马程序员——OC语言Foundation框架 NSArray NSSet NSDictionary\NSMutableDictionary
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一) NSNumber 将各种基本数据类型包装成NSNumber对象 @ ...
- Foundation框架系列-NSDictionary
排序 对字典中的key按照字母升序排序 // NOTE: 排序,得出最终请求字串 NSArray* sortedKeyArray = [[tmpDict allKeys] sortedArrayUsi ...
随机推荐
- 14个HTML5实现的效果合集
HTML5可不是什么虚幻的概念,与其高谈阔论的讨论HTML5未来的趋势和价值,不如一起研究一下现在的HTML5可以做出哪些成果,可以让我们做出出色的产品. Form Follows Function就 ...
- Windows 8 应用商店无法连接到网络的终极完美解决方案
当你看到以下几个步骤的时候,你可能会不以为然,因为你已经试过了,还是没成功,依然提示"你的电脑没有连接到Internet或者现在无法使用Windows应用商店,要使用Windows应用商店, ...
- iOS版本比较方法
之前一直把版本号转换为floatValue,但是最近在项目中又出现了float的问题,主要是 NSString表示为@"17.30",转换为floatValue 值为17.2999 ...
- Android Volley框架的使用(2)
3. 设置请求类型和参数 Volley默认的请求类型是GET,如果需要用POST,可以在构造函数中进行设置.设置参数可以通过重写getParams()方法来实现. private void postR ...
- TSwitch 中文简繁显示支持(XE6 Android)
说明: XE6 的 TSwitch 做了很多改进,包含多语显示处理,但 XE6 似乎只认定一种中文语系「zh」,它无法处理「zh_TW」.「zh_CN」.「zh_HK」.「zh_SG」等语系,不过可以 ...
- Javascript单元测试Unit Testing之QUnit
body{ font: 16px/1.5em 微软雅黑,arial,verdana,helvetica,sans-serif; } QUnit是一个基于JQuery的单元测试Uni ...
- Fiddler (二) Script 用法
通过前一篇博客 [Fiddler教程], 我们了解了Fiddler的基本用法, 现在我们来看看Fiddler的高级用法. Fiddler Script. Fiddler中的script 可以 ...
- mysql出错:Access denied for user 'root'@'localhost' (using password: YES)
网站链接mysql数据库的时候,连接不上,并报出错误:Access denied for user 'root'@'localhost' (using password:YES) 这是个相当恼火的问题 ...
- java对cookie的操作
java对cookie的操作比较简单,主要介绍下建立cookie和读取cookie,以及如何设定cookie的生命周期和cookie的路径问题. 建立一个无生命周期的cookie,即随着浏览器的关闭即 ...
- 【HTML5】HTML5本地数据库(Web Sql Database)
Web Sql数据库简介 Web SQL数据库API实际上不是HTML5规范的组成部分,而是单独的规范.它通过一套API来操纵客户端的数据库. Web SQL数据库的浏览器支持情况 Web SQL 数 ...