字典集合

Objective-C

Posted by YiMiTuMi on October 24, 2022

NSDictionary 与 NSMutableDictionary

NSDictionary与NSMutableDictionary都是数组,只不过是以键值对的形式存储数据的,存储数据的同时,必须要指定这个数据的别名才可以,要找到存储在这个数组中的数据要通过别名来找,而不是下标。

NSDictionary是NSMutableDictionary父类,NSDictionary里面的元素不可以修改,NSMutableDictionary中的元素可以动态的增加和删除。

NSDictionary 字典集合

NSDictionary:

  1)以以键值对的形式存储数据,键是不允许重复的。

  2)字符数组一旦创建就无法动态的新增和删除。

  3)键:只能是遵守了NSCoping协议的对象,而NSString就是遵守了这个协议。值:只能是OC对象。

创建字典数组:

NSDictionary* dict1 = [NSDictionary new];

NSDictionary* dict2 = [[NSDictionary alloc] init];

NSDictionary* dict3 = [NSDictionary dictionary];

这种方式创建出来的字典数组中没有任何元素,因为NSDictionary中的元素无法新增,所以没有意义。

//值1,键1,值2,键2
NSDictionary* dict1 = [NSDictionary dictionaryWithObjectsAndKeys : @"wang", @"1", @"guang", @"2", nil];

//@{键1 : 值1, 键2 : 值2}
NSDictionary* dict2 = @{@"wang" : @"1", @"guang" : @"2"};

注意: 第一个初始化是先写值然后才写键!( @”wang” 值, @”1” 键)

打印数组中所有的数组:

NSDictionary* dict = [[NSDictionary alloc] init];
NSLog(@"%@", dict);

通过键取值:

NSLog(@"%@", dict[@"1"]); //取 dict 中,@"1"这个键对应的值

NSLog(@"%@", [dict objectFotKey : @"1"]); //调用方法 objectFotKey

如果给定的Key不在数组中,取到的值是nul不会报错。

获取字典数组键值对的个数:

NSLog(@"%lu", dict.count);

遍历字典数组:

使用 for in 循环遍历出来的是字典数组中所有的键值,再通过键取值:

NSDictionary* dict = [[NSDictionary alloc] init];

for (id item in dict)
{
	NSLog(@"%@ = %@", item, dict[item]);
}

使用 block 遍历:

NSDictionary* dict = [[NSDictionary alloc] init];

[dict enumerateKeysAndObjectsUsingBlock : ^(id _Nonnull key, id _Nonnull obj, BOOL* _Nonnull stop)
{
	
	NSLog(@"%@ = %@", key, obj);

}];

NSMutableDictionary 可变字典集合

NSMutableDictionary是NSDictionary的子类,既在NSDictionary基础上做了扩展,使其存储在其中的元素可以动态的新增和删除。

创建字典数组:

NSMutableDictionary* dict1 = [NSMutableDictionary new];

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

NSMutableDictionary* dict3 = [NSMutableDictionary dictionary];

这种方式创建出来的可变字典数组中没有任何元素,但长度为0,但是有意义。

//值1,键1,值2,键2
NSMutableDictionary* dict1 = [NSMutableDictionary dictionaryWithObjectsAndKeys : @"wang", @"1", @"guang", @"2", nil];

//@{键1 : 值1, 键2 : 值2}
NSMutableDictionary* dict2 = @{@"wang" : @"1", @"guang" : @"2"};

注意: 第一个初始化是先写值然后才写键!( @”wang” 值, @”1” 键)

新增键值对:

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

//先值后键
[dict setObject:@"wang" forKey:@"1"]; 
[dict setObject:@"guang" forKey:@"2"];

如果键已存在,则会替换掉。

删除键值对:

删除所有键值对:

NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
[dict removeAllObjects];

删除指定键值对:

NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
[dict removeObjectForKey:@"1"]; //接受一个键

保存到 .plist 文件中

NSMutableDictionary 和 NSDictionary 都可以。

保存:

NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
[dict writeToFile : @"/User/Apple/Desktop/dict.plist" atomically : NO]; //接受一个路径

读取:

NSMutableDictionary* dict = [NSMutableDictionary dictionaryWithContentsOfFile : @"/User/Apple/Desktop/dict.plist"];