*********************************************

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的更多相关文章

  1. 黑马程序员——OC语言Foundation框架 (2) NSArray NSSet NSDictionary\NSMutableDictionary

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)NSArray 1>NSArray :不可变数组 ①创建方法 ...

  2. 关于NSString,NSMutableString,NSArray,NSMutableArray,NSDictionary,NSMutableDictionary

    NSString,NSMutableString,NSArray,NSMutableArray,NSDictionary,NSMutableDictionary 在 OC 中我们天天都要用,而我们要怎 ...

  3. Object-c学习之路九(字典(NSDictionary&NSMutableDictionary))

    字典的练习和使用(遍历,搜索...)(Student和Book类文件可以查看上篇博客这次不上传了.) // // main.m // NSDictionary // // Created by Wil ...

  4. NSDictionary NSMutableDictionary NSSet NSMutableSet

    //description只是返回了一个字符串 //    [person description]; //        //如果想要打印需要NSLog //    NSLog(@"%@& ...

  5. NSDictionary , NSMutableDictionary, NSMutableDictionary 和 NSMutableSet)相当于java的map、set

    1 NSDictionary 和 NSMutableDictionary NSDictionary  :就是java中的map; 放入对象是键值对 key-value  , 同样 秉持了一样的原则,只 ...

  6. NSArray,NSMutable和NSSet,NSMutableSet和NSDictionary,NSMutableDictionary用法

    开始编写应用程序的代码时,可以利用大量的 Objective-C 框架.其中,为所有应用程序提供基本服务的 Foundation 框架尤为重要.Foundation 框架包括表示基本数据类型的值类(如 ...

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

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

  8. 黑马程序员——OC语言Foundation框架 NSArray NSSet NSDictionary\NSMutableDictionary

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一) NSNumber 将各种基本数据类型包装成NSNumber对象 @ ...

  9. Foundation框架系列-NSDictionary

    排序 对字典中的key按照字母升序排序 // NOTE: 排序,得出最终请求字串 NSArray* sortedKeyArray = [[tmpDict allKeys] sortedArrayUsi ...

随机推荐

  1. NPOI导入导出EXCEL通用类,供参考,可直接使用在WinForm项目中

    以下是NPOI导入导出EXCEL通用类,是在别人的代码上进行优化的,兼容xls与xlsx文件格式,供参考,可直接使用在WinForm项目中,由于XSSFWorkbook类型的Write方法限制,Wri ...

  2. 使用James搭建一个自己的邮箱服务器

    ---第一天开发--- 下载Apache James 3.0邮箱服务器,解压到响应的目录 可以看到目录结构: H:\code\JavaCode\James\apache-james-3.0-beta4 ...

  3. CSS基础-插曲

    CSS学习 1:通过css来设置边框的颜色 我们可以通过border:10px solid red;来统一的设置颜色,但是我们有的时候需要每个边框的颜色不一样,我们就需要通过各自设置的方法来设置边框的 ...

  4. 使用archiver在nodejs下打包

    archiver是一个在nodejs中能跨平台实现打包功能的模块,可以打zip和tar包,是一个比较好用的三方模块. 使用前先安装archiver模块. npm install archiver 建立 ...

  5. C# ~ 从 XML 到 Linq 到 Linq to XML

    .XML 可扩展标记语言 (Extensible Markup Language), 标记 (markup) 是关键部分,是标准通用标记语言 (Standard Generalized Markup ...

  6. ASP.NET MVC 网站开发总结(一)

    历经一个多月的努力,工作室的门户网站(http://www.wingstudio.org)终于结束了内部公测. 仔细算一下,大概把网站开发出1.0版本大概用了一个月的时间(主要是利用课余时间),其后大 ...

  7. 第三讲:WCF介绍(3)

    代码 https://yunpan.cn/cPns5DkGnRGNs   密码:3913   前面我们通过一个小的例子,大概了解的WCF. 这里我们补充下  EndPoint 配置  A,B,C  中 ...

  8. 使用ActivityGroup类显示多个Activity

    有些情况下需要把一个Activity分割成几部分,如上半部分绘制图形,下半部分显示图表,这时就需要用到ActivityGroup. 定义一个类继承自ActivityGroup,Java文件如下: pa ...

  9. 世界那么Big,组件那么Small

    推荐一个跨平台模块化App框架 -Small. Small,做最轻巧的跨平台插件化框架. 功能 完美内置 所有插件支持内置于宿主包中 高度透明 插件编码.布局编写方式与独立应用开发无异 插件代码调试与 ...

  10. POJ 3276 Face The Right Way 反转

    大致题意:有n头牛,有些牛朝正面,有些牛朝背面.现在你能一次性反转k头牛(区间[i,i+k-1]),求使所有的牛都朝前的最小的反转次数,以及此时最小的k值. 首先,区间反转的顺序对结果没有影响,并且, ...