结合之前的学习笔记以及参考《Objective-C编程全解(第三版)》,对Objective-C知识点进行梳理总结。知识点一直在变,只是作为参考,以苹果官方文档为准~
十三、字典类
注意:下面的所提及的方法都是常用方法,全部列出不大现实,参考Xcode帮助文档即可~
一、不可变字典NSDictionary
1、基础知识
(1)字典中的数据以键-值对(key-value)的形式来保存,一个键值对成为entry;
(2)键和值可以为任意对象,一般以字符串作为键key;
(3)字典的键必须唯一,nil不能作字典的键;
(4)字典中的元素是无序的;
(5)键作为元素索引使用,通过key查找相应地value
2、新语法
NSDictionary *dic = @{@"Zhu" : @16,
@"Hu" : @18
}; //新语法,冒号两端空格,花括号
NSLog(@"%@",dic[@"Zhu"]); //获取value值新语法,中括号内为key
3、字典的创建和初始化
+ (instancetype)dictionary; //空字典
+ (instancetype)dictionaryWithObject:(id)object forKey:(id <NSCopying>)key; //返回一个字典对象,只包含一个键值对
+ (instancetype)dictionaryWithObjects:(const id [])objects forKeys:(const id [])keys count:(NSUInteger)cnt; //由objects和keys数组中的元素作为键值对来初始化,数组中包含的元素个数由count决定,返回一个字典对象
- (instancetype)initWithObjects:(NSArray *)objects forKeys:(NSArray *)keys; //从objects和keys数组中各取出一个元素作为value和key的键值对,返回包含该键值对的字符对象;
- (instancetype)initWithObjectsAndKeys:(id)object,(id)key, nil;
- (instancetype)initWithDictionary:(NSDictionary *)otherDictionary;
4、访问元素
- (NSUInteger)count; - (id)objectForKey:(id)aKey; //返回akey对应的值,不存在返回nil - (NSArray *)allKeys; //返回字典中包含的所有关键字 - (NSEnumerator *)keyEnumerator; //返回可访问字典所有key的快速枚举器 - (NSEnumerator *)objectEnumerator;//返回可访问字典所有value的快速枚举器 - (NSArray *)allKeysForObject:(id)anObject; //返回anObject在字典中对应的所有关键字
部分方法代码练习
NSArray *array = [NSArray arrayWithObjects:@"a",@"a",@"c", nil];
NSArray *names = [NSArray arrayWithObjects:@1,@2,@3, nil];
NSDictionary *dic1 = [[NSDictionary alloc] initWithObjects:array forKeys:names];
NSLog(@"%@",[dic1 allKeysForObject:@"a"]);
NSDictionary *dict = @{@"Zhu" : @16,
@"Hu" : @18
}; //新语法
NSLog(@"%@",dict[@"Zhu"]); //获取value值新语法
NSLog(@"%@",[dict objectForKey:@"Zhu"]);
NSLog(@"%@",[dict allKeys]);
output:
2015-07-05 15:40:19.038 exercise_字典[1099:75841] (
1,
2
)
2015-07-05 15:40:19.039 exercise_字典[1099:75841] 16
2015-07-05 15:40:19.039 exercise_字典[1099:75841] 16
2015-07-05 15:40:19.040 exercise_字典[1099:75841] (
Zhu,
Hu
)
2015-07-05 15:40:19.040 exercise_字典[1099:75841] Hello, World!
二、可变字典NSMutableDictionary
1、初始化
- (instancetype)initWithCapacity:(NSUInteger)numItems; //指定长度
2、增减键值对
//添加同时也可替换!!
- (void)setObject:(id)anObject forKey:(id <NSCopying>)aKey; //添加元素,不能为nil;同时可以用来替换元素,因为键值唯一,如果添加的已存在,会替换之前的元素
- (void)addEntriesFromDictionary:(NSDictionary *)otherDictionary; //otherDictionary的数据追加到当前字典,若有关键字相同,以otherDictionary的为最终值 - (void)setDictionary:(NSDictionary *)otherDictionary; //otherDictionary覆盖当前字典,当前字典所有数据都删除 - (void)removeObjectForKey:(id)aKey; //删除akey对应的键值对 - (void)removeObjectsForKeys:(NSArray *)keyArray; //删除键值为keyArray中元素的所有键值对 - (void)removeAllObjects; //删除所有键值对