13.NSDictionary与NSMutableDiction

2019-01-05  本文已影响0人  Maserati丶

参考自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对比
上一篇下一篇

猜你喜欢

热点阅读