免费开源的iOS开发学习平台

OC字典:2-NSMutableDictionary类

可变字典类(NSMutableDictionary类)是不可变字典类(NSDictionary类)的子类。NSMutableDictionary类继承了NSDictionary类的属性和方法之外,与不可变字典相比,其存储的键值可以新增、删除以及修改。

实例化可变字典对象

在开发中,当我们需要实例化一个可变字典对象时,可以使用如下的一些方法。

  • 快速简易方法:使用dictionary方法来初始化一个空的可变字典对象是最简便的得到一个可变字典对象的方法,获得的可变字典对象不指定初始容量。
+ (instancetype)dictionary;
  • dictionaryWithCapacity:方法:使用该方法创建可变字典对象时,需要预先指定可变字典的容量,在初始化时会根据传入的容量参数在内存中预先分配空间。
+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems;
  • initWithContentsOfFile:方法:从指定文件初始化得到一个可变字典对象。
- (nullable NSMutableDictionary<KeyType, ObjectType> *)initWithContentsOfFile:(NSString *)path;

增加键值对

与不可变字典相比,通过调用setObject:forKey:方法,可变字典内存储的键值可以增加。

- (void)setObject:(ObjectType)anObject forKey:(KeyType <NSCopying>)aKey;

下方的代码中,首先创建了一个空的可变字典,然后在该字典中插入了两个键值对,最后打印出可变字典中的键值对。

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //实例化一个可变字典
        NSMutableDictionary *mDict = [NSMutableDictionary dictionary];
        //插入一个键值对
        [mDict setObject:@"www.99ios.com" forKey:@"website"];
        [mDict setObject:@"九九学院" forKey:@"name"];
        NSLog(@"wesite:%@",mDict[@"website"]);
        NSLog(@"name:%@",mDict[@"name"]);
    }
    return 0;
}

运行结果:

修改键值对的值

可变字典除了能够新增键值对之外,还可以对已经存在的键值对的值进行修改。当需要修改键值对时,我们需要根据键Key取出字典中的键值对,然后使用赋值运算符更新值Value。

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //实例化一个可变字典
        NSMutableDictionary *mDict = [NSMutableDictionary dictionary];
        //插入一个键值对
        [mDict setObject:@"www.99ios.com" forKey:@"website"];
        [mDict setObject:@"九九学院" forKey:@"name"];
        NSLog(@"wesite原值:%@",mDict[@"website"]);
        NSLog(@"name原值:%@",mDict[@"name"]);
        //修改键值对的值
        mDict[@"website"] = @"www.apple.com";
        mDict[@"name"] = @"苹果公司";
        NSLog(@"wesite新值:%@",mDict[@"website"]);
        NSLog(@"name新值:%@",mDict[@"name"]);
    }
    return 0;
}

运行结果:

移除键值对

当可变字典中的某个/某些键值不再需要时,可以使用NSMutableDictionary中定义的键值移除方法进行删除操作。

  • removeObjectForKey方法,可以移除某个键值对
- (void)removeObjectForKey:(KeyType)aKey;
  • removeObjectsForKeys:方法,可以移除多个键值对,把需要移除的所有键Key存储在一个数组对象中,作为参数传入。
- (void)removeObjectsForKeys:(NSArray<KeyType> *)keyArray;
  • 使用removeAllObjects方法,可以移除可变字典中的所有键值对。
- (void)removeAllObjects;

示例代码

https://github.com/99ios/4.4.2