NSDictionary
NSDictionary是一组与唯一秘钥关联的元素的静态集合,NSDictionary满足一下几个性质:
- 所有的元素与秘钥为一对一关系。
- 每个秘钥都是不相同的,唯一的。
NSDictionary中的所有元素都是无序的。
创建方式
NSDictionary *dic1 = [[NSDictionary alloc]init];
NSDictionary *dic2 = [NSDictionary new];
NSDictionary *dic3 = [NSDictionary dictionary];
//创建并赋值
NSDictionary *dic4 = [[NSDictionary alloc]initWithObjectsAndKeys:@"1",@"a",@"2",@"b", nil];
NSDictionary *dic5 = @{@"a":@"1",@"b":@"2"};
常用方法
获取字典Count
@property (readonly) NSUInteger count;
- 只读,获取字典内元素总数。
- 用法:
dic.count;
获取所有秘钥
@property (readonly, copy) NSArray<KeyType> *allKeys;
- 只读,获取字典内所有的秘钥。
- 用法:
NSArray *array = [dic allKeys]; //获取字典 dic 中所有的秘钥
获取所有元素
@property (readonly, copy) NSArray<ObjectType> *allValues;
- 只读,获取字典内所有的元素。
- 用法:
NSArray *array = [dic allValues]; //获取字典 dic 中所有的元素
根据秘钥获取元素
- (nullable ObjectType)objectForKey:(KeyType)aKey;
- 根据指定秘钥,获取字典内对应的元素。
- 用法:
[dic objectForKey:@"a"]; //获取字典 dic 内秘钥为 "a" 的元素
字典的快速枚举
// 遍历字典内的key
for (NSString *str in dic)
NSLog(@"%@",str);
// 遍历字典内的value,由于字典的内容不一定是字符串,所以用id
for (id item in [dic5 allValues])
NSLog(@"%@",item);
NSMutableDictionary
NSMutableDictionary即为元素与唯一秘钥对应的动态集合,称为可变字典,简单的讲,NSMutableDictionary与NSDictionary的区别就是NSMutableDictionary可以进行元素的增删改操作,而NSDictionary只能进行查询操作。
创建方式
NSMutableDictionary *mDic1 = [NSMutableDictionary new];
NSMutableDictionary *mDic2 = [[NSMutableDictionary alloc]init];
NSMutableDictionary *mDic3 = [NSMutableDictionary dictionary];
//设定元素数量为10 超过时自动增加
NSMutableDictionary *mDic4 = [NSMutableDictionary dictionaryWithCapacity:10];
增加\修改元素
- (void)setObject:(ObjectType)anObject forKey:(KeyType <NSCopying>)aKey;
- 为字典增加一个元素和对应的秘钥。
- 用法
[dic setObject:@"value1" forKey:@"key1"]; - 修改元素也只需要调用这个方法,并输入
key值想要修改的元素的秘钥即可 - 用法
[dic setObject:@"value2" forKey:@"key1"];
删除元素
- (void)removeObjectForKey:(KeyType)aKey;
- 删除字典中指定秘钥的元素。
- 用法:
[dic removeObjectForKey:@"key1"];
- (void)removeAllObjects;
- 删除字典内所有元素。
- 用法
[dic removeAllObjects];
- (void)removeObjectsForKeys:(NSArray<KeyType> *)keyArray;
- 根据一个秘钥数组来批量删除字典内元素。
- 用法
NSArray *arr = @[@"key1",@"key2"]; [dic removeObjectsForKeys:arr];