文章目录
- NSDictionary
-
- NSDictionary字典数组的特点:
- NSdictionary数组与NSArray数组对比
- 创建NSDictionary数组
- NSDictionary数组的使用
- 遍历字典数组
- NSMutableDictionary
-
- 特点:
- 创建可变字典数组
- 遍历字典数组
- 添加元素
- 删除元素
- 数组的文件操作
NSDictionary
NSDictionary字典数组的特点:
1.都是数组,以键值对的形式存储数据的,向数组汇总存储数据的同时要为其指定别名,通过别名来查找数据,而不是通过下标
2.字典数组一旦创建,无法动态新增
3.键:只能是遵守NSCoping协议的对象(例如NSString)
值:只能是OC对象
NSdictionary数组与NSArray数组对比
1.NSArray数组的元素是顺序存储的
NSDictionary字典数组是通过一个哈希函数来计算出键值对存储位置的
2.存数据的效率:NSArray更高
取数据的效率:
a.如果需要取出全部数据,NSArray效率高(顺序存取)
b.如果只取出指定的几个数据,NSDictionary效率更高(通过别名和哈希函数计算存储位置,再取数据)
创建NSDictionary数组
1.创建空字典数组---无意义
NSDictionary *dict1 = [NSDictionary new];
NSDictionary *dict2 = [[NSDictionary alloc] init];
NSDictionary *dict3 = [NSDictionary dictionary];
2.常用创建方法-先值后键
+ (instancetype)dictionaryWithObjectsAndKeys:(id)firstObject, ...
eg: NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"Saber",@"Servant",@"Emiya",@"Master", nil]; //dictionaryWithObjectsAndKeys:[值,键,值,键,nil]
3.简要创建方式-先键后值,
NSdictionary *dict = @{键1:值1,键2:值2,键3:值3,......};
eg: NSDictionary *dict = @{@"Master":@"Tohsaka",@"Servant":@"Archer"};
NSDictionary数组的使用
1.取出数组中的值
a.别名法
数组名[别名];
NSLog(@"%@",dict[@"Master"]);
b.调用字典数组对象方法
- (nullable ObjectType)objectForKey:(KeyType)aKey;
如果给定的值在数组中不存在,会取到nil,不会报错
eg: NSLog(@"%@",[dict objectForKey:@"Servant"]);
2.获得字典数组的键值对个数
@property (readonly) NSUInteger count;
eg: NSLog(@"dicti.count = %lu",dict.count);
3.字典数组中的键不允许重复,如果键重复了,后面的键无效
遍历字典数组
1.字典数组无法通过下标读取,所以普通的for循环无法遍历字典数组
2.使用 for in 循环遍历出来的是字典中所有的键,可以再通过键来获取对应值
NSDictionary *dict = @{@"Master":@"Tohsaka",@"Servant":@"Archer"};
eg1: for(id item in dict) {
NSLog(@"%@",item);
}
打印结果:Master Servant
eg2: for(id item in dict) {
NSLog(@"%@ = %@ ",item,dict[item]);
}
打印结果:Master = Tohsaka Servant = Archer
3.通过block方式遍历
[dict enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
NSLog(@"%@ = %@",key,obj);}];
//通过key获取键,obj获取值,stop用于控制循环停止
NSMutableDictionary
特点:
1.是NSDictionary的子类,也是一个字典数组,以键值对的形式存储数据
2.重点:NSMutableDictionary在父类基础上做了扩展:
a.NSMutableDictionary中的元素可以动态的新增和删除
创建可变字典数组
1.创建空数组---有意义
NSMutableDictionary *dict1 = [NSMutableDictionary new];
NSMutableDictionary *dict2 = [[NSMutableDictionary alloc] init];
NSMutableDictionary *dict3 = [NSMutableDictionary dictionary];
2.简要创建并初始化
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"Saber",@"Servant",@"Emiya",@"Master", nil];
注意:不能通过下面这种方法来创建可变字典数组
NSMutableDictionary *dict = @{};//error 子类的指针不能指向父类对象
遍历字典数组
与NSDictionary遍历方法一致,往前翻翻吧
添加元素
- (void)setObject:(ObjectType)anObject forKey:(KeyType )aKey;
注意:如果键重复了,那么后添加值的会替换原来的值
删除元素
1.删除所有元素:
- (void)removeAllObjects;
2.通过键删除
- (void)removeObjectsForKeys:(NSArray *)keyArray;
数组的文件操作
1.将字典存放进plist文件
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile
eg: [dict writeToFile:@"/Users/heyuxuan/Desktop/dict.plist" atomically:NO];
2.从plist文件读取数据用于存进字典
+ (nullable NSDictionary *)dictionaryWithContentsOfFile:(NSString *)path
eg: NSDictionary *dict1 = [NSDictionary dictionaryWithContentsOfFile:@"/Users/heyuxuan/Desktop/dict.plist"];