NSDictionary

1,186 阅读3分钟

// 1.NSDictionary字典的初始化(常见的几种方式)

NSDictionary *dict1 = [NSDictionary dictionaryWithObject:@"123" forKey:@"key1"];
NSDictionary *dict2 = [NSDictionary dictionaryWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2",nil];
NSDictionary *dict3 = [NSDictionary dictionaryWithDictionary:dict1];
NSDictionary *dict4 = @{@"key1": @"value1",@"key2": @"value2"};
NSDictionary *dict5 = [[NSDictionary alloc] initWithDictionary:dict1];
NSDictionary *dict6 = [[NSDictionary alloc] initWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2",nil];
NSLog(@"dict1 = %@",dict1);
NSLog(@"dict2 = %@",dict2);
NSLog(@"dict3 = %@",dict3);
NSLog(@"dict4 = %@",dict4);
NSLog(@"dict5 = %@",dict5);
NSLog(@"dict6 = %@",dict6);

// 2.NSDictionary的操作

NSDictionary *dict2 = [NSDictionary dictionaryWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2",nil];

//字典中元素个数
NSInteger count = dict2.count;
NSLog(@"dict2的数量为%@",@(count));

//根据key(索引)找value(值)
NSString *value = dict2[@"key1"];
NSLog(@"dict2中关键字key1对应的值为%@",value);

//获取字典中的所有的key
NSArray *aryKey = [dict2 allKeys];
NSLog(@"字典dict2的所有关键字是%@",aryKey);

//获取字典中所有的value
//第一种写法
for (NSString *key in [dict2 allKeys]) {
    NSString *value = [dict2 objectForKey:key];
    NSLog(@"关键字key为%@对应的值为%@",key,value);
}
//第二种写法
NSLog(@"dict2的所有值为%@",[dict2 allValues]);

//获取某个值value对应的所有键key
NSArray *keys = [dict2 allKeysForObject:@"value1"];
NSLog(@"dict2值为value1对应的所有关键字为%@",keys);

// 3.NSMutableDictionary 可变字典

//1.创建初始化
NSDictionary *dict1 = [NSDictionary dictionaryWithObject:@"123" forKey:@"key3"];
NSDictionary *dict2 = [NSDictionary dictionaryWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2" ,nil];
NSMutableDictionary *mutableDict = [NSMutableDictionary dictionaryWithDictionary:dict2];

//2.添加键值对 和 设定
// 2.1添加一个指定键值对
[mutableDict setValue:@"wu dang" forKey:@"attribute"];
NSLog(@"mutableDict = %@", mutableDict);
// 2.2像字典中添加整个字典对象
[mutableDict addEntriesFromDictionary:dict1];
NSLog(@"mutableDict = %@", mutableDict);
// 2.3把字典内容设置与指定字典的内容相同
[mutableDict setDictionary:dict1];
NSLog(@"mutableDict = %@", mutableDict);

//3.修改key 对应的value
[mutableDict setValue:@"shan jia" forKey:@"hobby"];
NSLog(@"mutableDict = %@", mutableDict);

//4.删除键值对
// 4.1删除制定键值对
[mutableDict removeObjectForKey:@"key2"];
NSLog(@"mutableDict = %@", mutableDict);
// 4.2删除在数组中包含的指定key的对应的值
NSArray *array = @[@"key1",@"key2",@"key3"];
[mutableDict removeObjectsForKeys:array];
NSLog(@"mutableDict = %@", mutableDict);
// 4.3删除字典中的所有对象
[mutableDict removeAllObjects];
NSLog(@"mutableDict = %@", mutableDict);

// 4.NSDictionary 和 json 的互相转化

// 1.字典转成json
NSDictionary *jsondic = [NSDictionary dictionaryWithObjectsAndKeys:
                         @"zhang san",@"name",
                         @"men",@"sex",
                         @"playgame",@"hobby",
                         @"347",@"age",nil];
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsondic options:NSJSONWritingPrettyPrinted error:nil];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"jsonString = %@",jsonString);

// 2.json转成字典
NSData *data = [jsonString dataUsingEncoding:NSASCIIStringEncoding];
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
NSLog(@"dict = %@",dict);
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self jsonTransformDictionary];
}

#pragma mark NSDictionary 和 json 的互相转化
- (void)jsonTransformDictionary {
    // 1.字典转成json
    NSDictionary *jsondic = [NSDictionary dictionaryWithObjectsAndKeys:
                             @"zhang san",@"name",
                             @"men",@"sex",
                             @"playgame",@"hobby",
                             @"347",@"age",nil];
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsondic options:NSJSONWritingPrettyPrinted error:nil];
    NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    NSLog(@"jsonString = %@",jsonString);
    
    // 2.json转成字典
    NSData *data = [jsonString dataUsingEncoding:NSASCIIStringEncoding];
    NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
    NSLog(@"dict = %@",dict);
}

#pragma mark NSMutableDictionary 可变字典
- (void)createMutableDictionary {
    //NSMutableDictionary
    //1.创建初始化
    NSDictionary *dict1 = [NSDictionary dictionaryWithObject:@"123" forKey:@"key3"];
    NSDictionary *dict2 = [NSDictionary dictionaryWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2" ,nil];
    NSMutableDictionary *mutableDict = [NSMutableDictionary dictionaryWithDictionary:dict2];
    
    //2.添加键值对 和 设定
    // 2.1添加一个指定键值对
    [mutableDict setValue:@"wu dang" forKey:@"attribute"];
    NSLog(@"mutableDict = %@", mutableDict);
    // 2.2像字典中添加整个字典对象
    [mutableDict addEntriesFromDictionary:dict1];
    NSLog(@"mutableDict = %@", mutableDict);
    // 2.3把字典内容设置与指定字典的内容相同
    [mutableDict setDictionary:dict1];
    NSLog(@"mutableDict = %@", mutableDict);
    
    //3.修改key 对应的value
    [mutableDict setValue:@"shan jia" forKey:@"hobby"];
    NSLog(@"mutableDict = %@", mutableDict);
    
    //4.删除键值对
    // 4.1删除制定键值对
    [mutableDict removeObjectForKey:@"key2"];
    NSLog(@"mutableDict = %@", mutableDict);
    // 4.2删除在数组中包含的指定key的对应的值
    NSArray *array = @[@"key1",@"key2",@"key3"];
    [mutableDict removeObjectsForKeys:array];
    NSLog(@"mutableDict = %@", mutableDict);
    // 4.3删除字典中的所有对象
    [mutableDict removeAllObjects];
    NSLog(@"mutableDict = %@", mutableDict);
}

#pragma mark NSDictionary的操作
- (void)operationDictionary {
    // 2.NSDictionary的操作
    NSDictionary *dict2 = [NSDictionary dictionaryWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2",nil];
    
    //字典中元素个数
    NSInteger count = dict2.count;
    NSLog(@"dict2的数量为%@",@(count));
    
    //根据key(索引)找value(值)
    NSString *value = dict2[@"key1"];
    NSLog(@"dict2中关键字key1对应的值为%@",value);
    
    //获取字典中的所有的key
    NSArray *aryKey = [dict2 allKeys];
    NSLog(@"字典dict2的所有关键字是%@",aryKey);
    
    //获取字典中所有的value
    //第一种写法
    for (NSString *key in [dict2 allKeys]) {
        NSString *value = [dict2 objectForKey:key];
        NSLog(@"关键字key为%@对应的值为%@",key,value);
    }
    //第二种写法
    NSLog(@"dict2的所有值为%@",[dict2 allValues]);
    
    //获取某个值value对应的所有键key
    NSArray *keys = [dict2 allKeysForObject:@"value1"];
    NSLog(@"dict2值为value1对应的所有关键字为%@",keys);
}

#pragma mark NSDictionary字典的初始化(常见的几种方式)
- (void)createDictionary {
    // 1.NSDictionary字典的初始化(常见的几种方式)
    NSDictionary *dict1 = [NSDictionary dictionaryWithObject:@"123" forKey:@"key1"];
    NSDictionary *dict2 = [NSDictionary dictionaryWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2",nil];
    NSDictionary *dict3 = [NSDictionary dictionaryWithDictionary:dict1];
    NSDictionary *dict4 = @{@"key1": @"value1",@"key2": @"value2"};
    NSDictionary *dict5 = [[NSDictionary alloc] initWithDictionary:dict1];
    NSDictionary *dict6 = [[NSDictionary alloc] initWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2",nil];
    NSLog(@"dict1 = %@",dict1);
    NSLog(@"dict2 = %@",dict2);
    NSLog(@"dict3 = %@",dict3);
    NSLog(@"dict4 = %@",dict4);
    NSLog(@"dict5 = %@",dict5);
    NSLog(@"dict6 = %@",dict6);
}

@end