美文网首页
13.NSDictionary与NSMutableDiction

13.NSDictionary与NSMutableDiction

作者: Maserati丶 | 来源:发表于2019-01-05 17:07 被阅读0次

    参考自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<KeyType> *allKeys; // 获取所有的key
    @property (readonly, copy) NSArray<ObjectType> *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 <NSCopying>)aKey; // 添加键值对
    - (void)removeAllObjects; // 删除所有的键值对
    - (void)removeObjectsForKeys:(NSArray<KeyType> *)keyArray; // 删除数组中所有key的键值对
    
    NSDictionary数据持久化
    1. 将字典数组的信息保存到plist文件中
      - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
    2. 从plist文件中还原回字典
      + (nullable NSDictionary<KeyType, ObjectType> *)dictionaryWithContentsOfFile:(NSString *)path;
    NSDictionary字典数组存储数据的原理

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

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

    相关文章

      网友评论

          本文标题:13.NSDictionary与NSMutableDiction

          本文链接:https://www.haomeiwen.com/subject/fmcdrqtx.html