讲解OC中字典(NSDictionary 不可变字典 NSMutableDictionary 可变字典)的常见用法:
先看一下知识树
1.字典(NSDictionary/NSMutableDictionary)添加方法
代码段:
// 字典(NSDictionary/NSMutableDictionary)添加方法
// 使用字面量:@{@“key1”:Object1, @"key2":Object2...}(NSDictionary适用)
NSDictionary *dict1 = @{@"key1":@"value1", @"key2":@"value2"};
NSLog(@"字面量创建不可变字典 dict1 = %@", dict1);
// 使用初始化方法1:[[NSDictionary alloc] initWithObjects:forKeys:](NSDictionary/NSMutableDictionary适用)
NSArray *keys = [NSArray arrayWithObjects:@"key1", @"key2", @"key3", nil];
NSArray *values = [NSArray arrayWithObjects:@"value1", @"value2", @"value3", nil];
NSDictionary *dict2 = [[NSDictionary alloc] initWithObjects:values forKeys:keys];
NSLog(@"使用初始化方法1创建不可变字典 dict2 = %@", dict2);
NSMutableDictionary *muDict1 = [[NSMutableDictionary alloc] initWithObjects:values forKeys:keys];
NSLog(@"使用初始化方法1创建可变字典 muDict1 = %@", muDict1);
// 使用初始化方法2:[[NSDictionary alloc] initWithObjectsAndKeys:object1, key1,object2,key2.....,nil]
//(NSDictionary/NSMutableDictionary适用)
NSDictionary *dict3 = [[NSDictionary alloc] initWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];
NSLog(@"使用初始化方法2创建不可变字典 dict3 = %@", dict3);
NSMutableDictionary *muDict2 = [[NSMutableDictionary alloc]
initWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];
NSLog(@"使用初始化方法2创建可变字典 muDict2 = %@", muDict2);
// 使用便利构造器1:[NSDictionary dictionaryWithObjects:forKeys:]
// 便利构造器[NSDictionary dictionaryWithObjects:forKeys:]和初始化方法1的用法一样
// 使用便利构造器2:[NSDictionary dictionaryWithObjecsAndKeys:object1, key1, object2, key2......,nil]
// 便利构造器[NSDictionary dictionaryWithObjecsAndKeys:object1, key1, object2, key2......,nil]和初始化方法2的用法一样
// 添加键值对:[mutableDict setObject:forKey:](当key在字典中不存在的场合,做追加操作)
[muDict2 setObject:@"value3" forKey:@"key3"];
NSLog(@"可变字典追加键值对 muDict2 = %@", muDict2);
运行结果:
2015-05-31 17:02:49.903 Demo_01[2544:154400] 字面量创建不可变字典 dict1 = {
key1 = value1;
key2 = value2;
}
2015-05-31 17:02:49.905 Demo_01[2544:154400] 使用初始化方法1创建不可变字典 dict2 = {
key1 = value1;
key2 = value2;
key3 = value3;
}
2015-05-31 17:02:49.905 Demo_01[2544:154400] 使用初始化方法1创建可变字典 muDict1 = {
key1 = value1;
key2 = value2;
key3 = value3;
}
2015-05-31 17:02:49.905 Demo_01[2544:154400] 使用初始化方法2创建不可变字典 dict3 = {
key1 = value1;
key2 = value2;
}
2015-05-31 17:02:49.905 Demo_01[2544:154400] 使用初始化方法2创建可变字典 muDict2 = {
key1 = value1;
key2 = value2;
}
2015-05-31 17:02:49.905 Demo_01[2544:154400] 可变字典追加键值对 muDict2 = {
key1 = value1;
key2 = value2;
key3 = value3;
}
2.字典(NSMutableDictionary)删除方法(删除的方法只对NSMutableDictionary适用)
代码段:
// 字典(NSMutableDictionary)删除方法
// 删除指定键的键值对:[mutableDict removeObjectForKey:]
[muDict1 removeObjectForKey:@"key1"];
NSLog(@"可变字典删除键值对 muDict1 = %@", muDict1);
// 删除指定键数组的键值对:[mutableDict removeObjectsForKeys:]
NSArray *removeArray = [NSArray arrayWithObject:@"key2"];
[muDict1 removeObjectsForKeys:removeArray];
NSLog(@"可变字典根据数组删除键值对 muDict1 = %@", muDict1);
// 删除所有键值对:[mutableDict removeAllObjects]
[muDict1 removeAllObjects];
NSLog(@"可变字典删除所有键值对 muDict1 = %@", muDict1);
运行结果:
2015-05-31 17:13:39.704 Demo_01[2626:160095] 可变字典删除键值对 muDict1 = {
key2 = value2;
key3 = value3;
}
2015-05-31 17:13:39.704 Demo_01[2626:160095] 可变字典根据数组删除键值对 muDict1 = {
key3 = value3;
}
2015-05-31 17:13:39.705 Demo_01[2626:160095] 可变字典删除所有键值对 muDict1 = {
}
3.字典(NSMutableDictionary)修改方法(修改的方法只对NSMutableDictionary适用)
// 字典(NSMutableDictionary)修改方法
// 当键存在的场合:[mutableDict setObject:forKey:]
[muDict2 setObject:@"value1_1" forKey:@"key1"];
NSLog(@"可变字典修改指定键的值 muDict2 = %@", muDict2);
// 将参数字典赋值到指定字典:[mutableDict setDictionary:]
[muDict1 setDictionary:muDict2];
NSLog(@"将参数字典赋值到指定字典 muDict1 = %@", muDict1);
运行结果:
2015-05-31 17:27:31.536 Demo_01[2678:165360] 可变字典修改指定键的值 muDict2 = {
key1 = "value1_1";
key2 = value2;
key3 = value3;
}
2015-05-31 17:27:31.551 Demo_01[2678:165360] 将参数字典赋值到指定字典 muDict1 = {
key1 = "value1_1";
key2 = value2;
key3 = value3;
}
4.字典(NSDictionary/NSMutableDictionary)查看方法
代码段:
// 字典(NSDictionary/NSMutableDictionary)查看方法 (可变数组和不可变数组的使用方法都是一样的)
// 查看指定key的value:Object = mutableDict[key]
NSString *value = muDict1[@"key1"];
NSLog(@"查看指定key的value = %@", value);
// 查看指定key对应的value:Object = [mutableDict objectForKey:]
NSString *value2 = [muDict1 objectForKey:@"key2"];
NSLog(@"查看指定key的value2 = %@", value2);
// 取得所有key的值:NSArray = [mutableDict allKeys]
NSArray *keysArray = [muDict1 allKeys];
NSLog(@"取得所有key的值 keysArray = %@", keysArray);
// 取得所有的Value值:NSArray = [mutableDict allValues:]
NSArray *valuesArray = [muDict1 allValues];
NSLog(@"取得所有的Value值 valuesArray = %@", valuesArray);
运行结果:
2015-05-31 17:38:11.789 Demo_01[2734:170286] 查看指定key的value = value1_1
2015-05-31 17:38:11.789 Demo_01[2734:170286] 查看指定key的value2 = value2
2015-05-31 17:38:11.790 Demo_01[2734:170286] 取得所有key的值 keysArray = (
key1,
key3,
key2
)
2015-05-31 17:38:11.790 Demo_01[2734:170286] 取得所有的Value值 valuesArray = (
"value1_1",
value3,
value2
)