13.NSDictionary与NSMutableDictionary

参考自xx_cc的文章


NSDictionary

NSDictionary以键值对的形式存储数据,唯一的key对应value,通过key来找到存储在字典中的value。NSDictionary字典一旦创建完毕,其键值对的个数就已经固定,无法删除,新增。

NSDictionart的创建
// key = name value = xx_cc ,前面的是value后面的是key
NSDictionary *dict =[NSDictionary dictionaryWithObjectsAndKeys:@"xx_cc",@"name",@"18",@"age", nil];

// 也可以通过快速创建 key:value
NSDictionary *dict2 = @{@"name":@"xx_cc",@"age":@"18"};
NSDiction的常用方法
@property (readonly) NSUInteger count; // 获取字典中键值对的个数
- (nullable ObjectType)objectForKey:(KeyType)aKey; // 获取键对应的值
@property (readonly, copy) NSArray *allKeys; // 获取所有的key
@property (readonly, copy) NSArray *allValues; // 获取所有value
NSDictionary的遍历

除使用for in遍历之外,同样可以使用block进行遍历

[dict2 enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
// key 键  ,obj 值    
}];
NSMutableDictionary

可变字典,相对于字典,可以进行键值对的删除和新增

NSMutableDictionary的常用方法
- (void)removeObjectForKey:(KeyType)aKey; //删除key对应的键值对
- (void)setObject:(ObjectType)anObject forKey:(KeyType )aKey; // 添加键值对
- (void)removeAllObjects; // 删除所有的键值对
- (void)removeObjectsForKeys:(NSArray *)keyArray; // 删除数组中所有key的键值对
NSDictionary数据持久化
  1. 将字典数组的信息保存到plist文件中
    - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
  2. 从plist文件中还原回字典
    + (nullable NSDictionary *)dictionaryWithContentsOfFile:(NSString *)path;
NSDictionary字典数组存储数据的原理

当往字典数组中存储1个键值对的时候,这个键值对并不是按照顺序存储,存储键值对的时候,会根据键和数组的长度做1个哈希算法,算出1个下标,将这个键值对存储在该下标处。
取值的时候:也是根据键做1个哈希算法,就可以算出这个键值对存储的下标,然后直接找到这个下标的数据取出就可以了。

NSDictionary与NSArray对比
  • 存储过程
    • NSArray数组的元素按照顺序存储
    • NSDictionary不是按照顺序存储的,存储的下标是通过哈希算法算出来的
  • 存储的效率
    • 存储的时候NSArray效率要高一些,因为NSArray不需要计算下标,直接往后存储即可
  • 取值的效率
    • 是将所有元素全部取出来,NSArray效率更高一些。
    • 只取数组中指定的几个元素,字典数组取值更快一些。

你可能感兴趣的:(13.NSDictionary与NSMutableDictionary)