OC--NSMutableDictionary可变字典

NSMutableDictionary,作为可变字典,其中的可变和可变字符串,可变数组是一样的。NSMutableDictionary是继承自NSDictionary的,所以上一篇文章中的一些属性和方法在这里都是适用的。下面来看看NSMutableDictionary的定义和初始化。

创建可变字典对象,定义并初始化:

定义NSMutableDictionary对象的类方法,numItems是字典中元素的个数。这个方法其实就是向内存申请了一定的内存空间。

+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems;

由于NSMutableDictionary是继承自NSDictionary的,NSDictionary是继承自NSObject的,所以适用alloc也可以创建一个可变字典对象,适用方法如下:

- (instancetype)initWithCapacity:(NSUInteger)numItems NS_DESIGNATED_INITIALIZER;

NSMutableDictionary *dic1 = [[NSMutableDictionary alloc]initWithCapacity:10];

        NSMutableDictionary *dic2 = [[NSMutableDictionary alloc]init];

上面两中创建形式的区别在于第一个申请了10个元素的空间,第二个只是创建了一个对象。和数组一样,当我们不知道要申请多少空间的时候。我们可以个 dictionaryWithCapacity:方法或者initWithCapacity:方法传递0作为参数。

可变字典的初始化赋值,是使用NSDictionary的赋值方法。


可变字典常用操作方法

在字典后添加一个字典,也是字典后面拼接一个字典。

- (void)addEntriesFromDictionary:(NSDictionary<KeyType, ObjectType> *)otherDictionary;

删除字典中所有的元素

- (void)removeAllObjects;

根据key数组,删除对应的元素

- (void)removeObjectsForKeys:(NSArray<KeyType> *)keyArray;

根据key删除一个对应的元素

- (void)removeObjectForKey:(KeyType)aKey;

使用一个新的字典覆盖原来字典的数据

- (void)setDictionary:(NSDictionary<KeyType, ObjectType> *)otherDictionary;

使用key:value形式修改字典中key对应的元素值

- (void)setObject:(nullable ObjectType)obj forKeyedSubscript:(KeyType <NSCopying>)key NS_AVAILABLE(10_8, 6_0);

代码示例:

        //创建字典对象,初始化

        NSDictionary *dic1 = [NSDictionary dictionaryWithObjectsAndKeys:

                              @"value1", @"key1",

                              @"value2", @"key2",

                              @"value3", @"key3",

                              @"value4", @"key4",

                              nil];

        //定义可变字符串对象

        NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithDictionary:dic1];

        NSLog(@"初始的字典:%@", dic);

        

        NSDictionary *dic2 = [NSDictionary dictionaryWithObjectsAndKeys:

                              @"value5", @"key5",

                              @"value6", @"key6",

                              @"value7", @"key7",

                              @"value8", @"key8",

                              nil];

        //字典拼接

        [dic addEntriesFromDictionary:dic2];

        NSLog(@"拼接后的字典:%@", dic);

        

        //修改key1对应的值

        [dic setObject:@"aaa" forKeyedSubscript:@"key1"];

        NSLog(@"修改后的字典:%@", dic);

        

        NSDictionary *dic3 = [NSDictionary dictionaryWithObjectsAndKeys:

                              @"value11", @"key11",

                              @"value22", @"key22",

                              @"value33", @"key33",

                              @"value44", @"key44",

                              @"value55", @"key55",

                              @"value66", @"key66",

                              nil];

        //字典覆盖

        [dic setDictionary:dic3];

        NSLog(@"覆盖后的字典:%@", dic);

        

        //删除一个元素

        [dic removeObjectForKey:@"key11"];

        NSLog(@"删除key1后的字典:%@", dic);

        

        //根据数组删除多个元素

        NSArray *array = @[@"key33", @"key22"];

        [dic removeObjectsForKeys:array];

        NSLog(@"删除key2key3后的字典:%@", dic);

        

        //删除所有字典元素

        [dic removeAllObjects];

        NSLog(@"删除所有元素后的字典:%@", dic);

打印结果:

2017-03-24 13:31:08.708 OCdemo[3060:333844] 初始的字典:{

    key1 = value1;

    key2 = value2;

    key3 = value3;

    key4 = value4;

}

2017-03-24 13:31:08.709 OCdemo[3060:333844] 拼接后的字典:{

    key1 = value1;

    key2 = value2;

    key3 = value3;

    key4 = value4;

    key5 = value5;

    key6 = value6;

    key7 = value7;

    key8 = value8;

}

2017-03-24 13:31:08.709 OCdemo[3060:333844] 修改后的字典:{

    key1 = aaa;

    key2 = value2;

    key3 = value3;

    key4 = value4;

    key5 = value5;

    key6 = value6;

    key7 = value7;

    key8 = value8;

}

2017-03-24 13:31:08.709 OCdemo[3060:333844] 覆盖后的字典:{

    key11 = value11;

    key22 = value22;

    key33 = value33;

    key44 = value44;

    key55 = value55;

    key66 = value66;

}

2017-03-24 13:31:08.709 OCdemo[3060:333844] 删除key1后的字典:{

    key22 = value22;

    key33 = value33;

    key44 = value44;

    key55 = value55;

    key66 = value66;

}

2017-03-24 13:31:08.710 OCdemo[3060:333844] 删除key2key3后的字典:{

    key44 = value44;

    key55 = value55;

    key66 = value66;

}

2017-03-24 13:31:08.710 OCdemo[3060:333844] 删除所有元素后的字典:{

}

Program ended with exit code: 0


这些就是字典的常用操作了,在实际的开发中,所能到的也就是这样的操作。

在我昨天写代码的时候,遇到一个关于字典数据转换赋值的问题。

读取字典数据的方法是objectForKey:方法,当我们需要读取字典中的数据,给其他变量赋值的时候,数据类型的对应关系一定要注意,特别是使用到BOOL这个类型的时候,即使字典中对应的类型也是BOOL类型,也要在读取后进行一次转换才可以赋值给变量,不然会发现所有的BOOL类型变量都是YES。



关于字符串、数组、字典的操作其实不多,但是在实际开发中的应用却很重要。因为在开发中就只有3部分:视图、数据、逻辑。对于数据的操作,其实就是对字符串、数组、字典、还有其他类型数据的操作,只是要加上操作处理逻辑。但是无论如何操作,都是使用这些最基础的操作方法进行的,这些基础的东西才是最重要的。以前总是不愿意去看这些基础的东西,在开发中,也总是想不起来这些基础的操作是什么,每次用到的时候都去baidu。耽误了时间也显得自己技术很差,特别是在面试的时候,当面试官问到一些处理的时候,既然都说不出操作方法名,真的很失败。。。。

这次回头来复习的目的就是要好好梳理这些最基础的东西,希望自己可以坚持下去,加油!

猜你喜欢

转载自blog.csdn.net/m0_37681833/article/details/65629144
今日推荐