接下来要总结的是oc中的集合类(NSArray,NSDictionary以及NSSet)中的NSDictionary:
oc字典有两种:NSDictionary(不可变的字典类)和NSMutableDictionary(可变的字典类),其中NSMutableDictionary 是 NSDictionary 的子类。
字典是由键值对(key-value)的形式存储的。
注意事项:
1.key 值唯一,通过key值可以唯一的获取到对应的value值。
2.字典中的键值对是没有顺序的,所以不能通过索引获取,只能通过key值获取。
3.key值和value值都必须是oc对象
4.key值必须是遵守了<NSCopying>协议的对象。
//NSDictionary
//创建一个包含一组键值对的不可变的字典
NSDictionary *dic1 = [NSDictionary dictionaryWithObject:@"mary" forKey:@"name"];
//获取数据,根据key值
NSString *nameString = [dic1 objectForKey:@"name"]; //值是mary
//创建一个不可变的包含多组键值对的字典:先写value,在写key
NSDictionary *dic2 = [NSDictionary dictionaryWithObjectsAndKeys:@“mary”, @"name", @(21), @"age", nil];
//将另一个字典中的内容都存到字典中
NSDictionary *dic3 = [NSDictionary dictionaryWithDictionary:dic2];
//value和key存到不同的数组中,但要注意两个数组中key和value一一对应
NSArray *ary1 = @[@(12),@"asd"];
NSArray *ary2 = @[@"age",@"name"];
NSDictionary *dic4 = [NSDictionary dictionaryWithObjects:ary1 forKeys:ary2];
//快速创建不可变的字典 @{ key1:value1, key2:value2… }
NSDictionary *dic5 = @{
@"name" : @“mary”,
@"age" : @(23),
@"sex" : @"女"
};
//获取字典中的内容
id name2 = dic5[@"name"];//值是mary
或者这样写 [dic5 objectForKey:@"sex"]
//获取键值对的个数
NSUInteger count = dic5.count;//也可以写成[dic5 count]
//获取所有的key值
NSArray *keysAry = [dic5 allKeys];
//所有的value值
NSArray *valueAry = [dic5 allValues];
//字典遍历
//1.先获取所有的key值,遍历key值数组,依次获取value值。
for (id key in keysAry) {
NSLog(@"key:%@ value:%@",key,[dic5 objectForKey:key]);
}
//2.for-in快速遍历
for (id obj in dic5) {
NSLog(@"key:%@ value:%@",obj, [dic5 objectForKey:obj]);
}
//NSMutableDictionary
//创建一个空的可变的字典,可以在后面添加键值对
NSMutableDictionary *muDic1 = [NSMutableDictionary dictionary];
//创建一个有键值对的可变字典
NSMutableDictionary *muDic2 = [NSMutableDictionary dictionaryWithDictionary:@{ @"name" : @“mary”, @"age" : @(12), @"sex" : @“girl” }];
//添加键值对
[muDic2 setObject:@"wq" forKey:@"name2"];
//当多次对同一个key赋值时,会保留最后一次的值
[muDic2 setObject:@"dd" forKey:@"name2"];
//删除
[muDic1 removeAllObjects]; //删除全部
[muDic2 removeObjectForKey:@"sex"]; //根据key删除键值对
}