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"]; //动态检测就会报错