Foundation框架(NSDictionary、NSMutableDictionary)

OC字典(NSDictionary、NSMutableDictionary)

一、NSDictionary

概述:NSDictionary也称作字典,作用类似:通过一个key,就能找到对应的value,NSDictionary是不可变的, 一旦初始化完毕, 里面的内容就无法修改,字典存储的时候,必须是"键值对"的方式来存储(同时键不要重复),键值对中存储的数据是"无序的",键值对集合可以根据键, 快速获取数据。

1、NSDictionary的创建

1 NSDictionary *dict = [NSDictionary dictionary];  //创建一个空的不可变的字典
2 NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@“name"]; //创建一个含有键值对的字典
3 NSDictionary *dict = [NSDictionary dictionaryWithObjects:@[@"jack", @"北京"]  forKeys: @[@"name", @“address"]];  //创建含有多个键值对的字典
4 NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
5 @"jack", @"name",
6 @"北京", @"address",
7 @"32423434", @"qq", nil];   //通过这种方式创建字典,不经常使用
8 NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};  //快速创建一个字典

2、NSDdictionary的访问方式

1 NSDictionary *dict = [NSDictionary dictionaryWithObjects:@[@"jack", @"北京"]  forKeys: @[@"name", @“address"]];
2 id obj = [dict objectForKey:@“name"];
3 id obj = dict[@“name"];      //这两种方式都可以
4 NSLog(@"%ld", dict.count); // 返回的是键值对的个数,在字典 key 称之为为键,value称之为值 输出结果为 2

3、字典的遍历

 1 NSDictionary *dict = @{@"name":@"lnj",@"age":@"30",@"height":@"1.68"};
 2 //第一种方式 常规遍历
 3 for (int i = 0; i < dict.count  ; i++) {
 4 // 把字典中所有key 保存到一个数组中
 5 NSArray *keys = [dict allKeys];
 6 NSLog(@"%@",keys[i]);
 7 //取出当前位置对应的key
 8 NSString *key = keys[i];
 9 //取出当前位置key 所对应的值
10 NSString *value = dict[key];
11 NSLog(@"key = %@,value = %@",key,value);
12 }
13 
14 //第二种方式 增强for循环
15 /*
16 for(NSString *obj in dict)
17 {
18 NSString *value = dict[obj];
19 NSLog(@"key = %@,value = %@",obj,value);
20 }
21 */
22 
23 //第三种方式 迭代器 遍历
24 /*
25 [dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
26 NSLog(@"key = %@,value = [%@]",key,obj);
27 }];
28 */

4、字典文件的读写

  1)字典写入文件

1 NSDictionary *dict = @{@"name":@"lnj",@"age":@"34",@"height":@"1.68"};
2 BOOL flag = [dict writeToFile:@"/Users/tangge/DeskTop/堂堂.plist" atomically:YES];
3 NSLog(@"%d",flag);   //写入成功返回YES,失败返回NO
4 //对比数组
5 /*
6 NSArray *arr = @[@34,@13,@23,@14];
7 BOOL flag =  [arr writeToFile:@"/Users/tangge/DeskTop/tt.plist" atomically:YES];
8 */

  2)从文件中读取字典

1 NSDictionary *newDict = [NSDictionary dictionaryWithContentsOfFile:@"/Users/tangge/DeskTop/堂堂.plist"];
2 NSLog(@"%@",newDict);

二、NSMutableDictionary

概述:NSMutableDictionary是NSDictionary的子类。NSDictionary是不可变的,一旦初始化完毕后,它里面的内容就永远是固定的,不能删除里面的元素, 也不能再往里面添加元素,NSMutableDictionary是可变的,随时可以往里面添加更改删除元素。

1、可变字典的创建

1 NSMutableDictionary *dict = [NSMutableDictionary dictionary];  //创建一个空的可变字典
2 NSMutableDictionary *dict2 = [NSMutableDictionary dictionaryWithObject:@"10" forKey:@"age"]; //创建含有一个键值对的字典
3 NSMutableDictionary *dict1 = [NSMutableDictionary dictionaryWithObjects:@[@"tg",@"td"] forKeys:@[@"name",@"name1"]]; //创建含有多个键值对的字典

2、可变字典的基本使用

1 NSMutableDictionary *dict = [NSMutableDictionary dictionary]; 
2 [dict setObject:@"jack" forKey:@“name"];     // 添加键值对
3 //字典访问方式
4 NSString *str1 = [dictM objectForKey:@"name"];//第一种访问方式
5 NSString *str = dict1[@"name"]; //第二种访问方式
6 [dict removeObjectForKey:@"name"];// 移除单个键值对 
7 [dictM removeObjectsForKeys:@[@"age",@"height"]]; //移除多个键值对
8 [dictM setValuesForKeysWithDictionary:@{@"age":@"10",@"height":@"1.68"}];//将字典中所有的键值对取出来放入到dictM中

3、NSMutableDictionary与NSDictionary注意点

1 //如果是可变数组出现重复的key,那么后面的 值会覆盖前面的值
2 NSMutableDictionary *dictM = [NSMutableDictionary dictionaryWithObjects:@[@"ttt",@"zzz"] forKeys:@[@"name",@"name"]];
3 NSLog(@"%@",dictM);   //输出的结果:zzz
4 //如果是不可变的数组出现重复的key,那么后面的值不会被保存
5 NSDictionary *dict = @{@"name":@"lnj",@"name":@"lmj"};
6 NSLog(@"%@",dict); //输出结果:name = lnj;
7 
8 NSMutableDictionary *dict = @{@"name" : @“jack"}; //快速创建的字典是不可变的,不能用可变的来接收,
9 [dict setObject:@"rose" forKey:@“name"];  //动态检测就会报错
原文地址:https://www.cnblogs.com/zhaoyutang/p/4628418.html