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"];