Mac / Mac mini
Xcode
一、字典的创建//1.实例化一个字典对象// 健(key) : 值(value)NSDictionary *dictt = [[NSDictionary alloc] initWithObjectsAndKeys:@"1",@"one",@"2",@"two",@"3",@"three",@"2015-4-23",@"today",@"xiaohong",@"name",@"2015-4-23",@"date", nil];//2.用一个字典实例化另外一个字典 NSDictionary *dict5 = [[NSDictionary alloc] initWithDictionary:dictt];
//3.类方法实例化对象 NSDictionary *dict6 = [NSDictionary dictionaryWithObjectsAndKeys:@"1",@"one",@"2",@"two",@"3",@"three", nil]; NSLog(@"dict3:%@",dict6); NSDictionary *dict7 = [NSDictionary dictionaryWithDictionary:dict3]; NSLog(@"dict4:%@",dict7);
//4.用两个数组 实例化一个字典 两个数组 元素要一一对应 //==放健 NSArray *keysArr = [[NSArray alloc] initWithObjects:@"one",@"two", nil]; //==放值 NSArray *valuesArr = [[NSArray alloc] initWithObjects:@"1",@"2", nil]; NSDictionary *dict8 = [NSDictionary dictionaryWithObjects:valuesArr forKeys:keysArr]; NSLog(@"dict5:%@",dict8);
【注意】---扩展//获取字典 所有的key-----allKeys (数组 NSArray*)NSArray *allKeysArr = [dict2 allKeys];NSLog(@"%@",allKeysArr);//获取字典 所有的Value----allValues (数组 NSArray*)NSArray *allValuesArr = [dict2 allValues];NSLog(@"%@",allValuesArr);
二、====字典的常用类型====//1.=====字典中的 值为“字符串” NSDictionary *dict1 = @{@"1":@"一",@"2":@"二",@"3":@"三"}; //2.====字典中的 值为“数字” NSDictionary *dict2 = @{@"一":@1,@"二":@2,@"三":@3}; //3.====字典中的 值为“数组” NSDictionary *dict3 = @{@"A":@[@"a",@"b",@"c"],@"B":@[@"d",@"e",@"f"],@"C":@[@"g",@"h",@"i"]}; //4.=====字典中的 值为"字典" NSDictionary *dict4 = @{@"A":@{@"1":@"一",@"2":@"二"},@"B":@{@"1":@"一",@"2":@"二"},@"C":@{@"1":@"一",@"2":@"二"}}; NSLog(@"%@",dict4); //5.=========bool 存入字典( 值为bool)【注意】bool值存入字典时,需要转为(NSNumber *)类型 BOOL bol = YES; NSNumber *numb = [NSNumber numberWithBool:bol]; NSDictionary *dict = @{@"ifOpen":numb}; NSLog(@"%@",dict); //【重点】从字典读取bool值 BOOL bol1 = [[dict objectForKey:@"ifOpen"] boolValue]; NSLog(@"%d",bol1);
三、NSDictionary的遍历方法1 ===快速遍历 NSDictionary *dict = @{@"name":@"lnj", @"phone":@"12345678", @"address":@"天朝"}; for (NSString *key in dict) { NSLog(@"key = %@, value = %@", key, dict[key]); }方法二 ===Block遍历[dict enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSString *obj, BOOL *stop) { NSLog(@"key = %@, value = %@", key, obj); }];
四、NSDictionary文件操作---将字典写入文件中- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;- (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically;存结果是xml文件格式,但苹果官方推荐为plist后缀======存入====NSDictionary *dict = @{@"name":@"lnj", @"phone":@"12345678", @"address":@"天朝"}; //是否存入BOOL flag = [dict writeToFile:@"/Users/LNJ/Desktop/dict.plist" atomically:YES]; NSLog(@"flag = %i", flag);=====从文读取====NSDictionary *newDict = [NSDictionary dictionaryWithContentsOfFile:@"/Users/LNJ/Desktop/dict.plist"]; NSLog(@"newDict = %@", newDict);
五、NSDictionary 与 Json字符串的相互转化//1. ===字典转Json字符串 NSDictionary *dict10 = @{@"A":@{@"1":@"一",@"2":@"二"},@"B":@{@"1":@"一",@"2":@"二"},@"C":@{@"1":@"一",@"2":@"二"}}; NSString *jsonString = [self convertToJSONData:dict10]; NSLog(@"json类型字符串: %@",jsonString);代码如下://1. 字典转Json字符串- (NSString*)convertToJSONData:(id)infoDict{ NSError *error; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:infoDict options:NSJSONWritingPrettyPrinted error:&error]; NSString *jsonString = @""; if (! jsonData){ NSLog(@"Got an error: %@", error); }else{ jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; } //去除掉首尾的空白字符和换行字符 jsonString = [jsonString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; [jsonString stringByReplacingOccurrencesOfString:@"\n" withString:@""]; return jsonString;}
//2.========JSON字符串转化为字典 NSDictionary *d =[NSDictionary dictionaryWithDictionary:[self dictionaryWithJsonString:jsonString]]; NSLog(@"字典:%@",d);代码如下://JSON字符串转化为字典- (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString{ if (jsonString == nil) { return nil; } NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; //转为二进制 NSError *err; NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&err]; if(err){ NSLog(@"json解析失败:%@",err); return nil; } return dic;}