看官们,我们在前面章回中介绍了Foundation框架中的集合,本章回中将介绍Foundation框架中的字典。
字典和集合类似,表示多个对象存放在一起的容器,不过字典中的对象不是单个对象,而是键值对,其中的键和值必须是对象类型,而且每个键不能相同,每个键通过哈希值来确认是否相同,这点和集合一样。
字典有两个分类:静态字典和动态字典,静态字典表示字典中的元素不可以被修改,反之可以修改的称为动态字典。这点和数组以及集合是一样的。静态字典使用NSDictionary类来表示,动态字典使用NSMutableDictionary类来表示。明白字典的概念和分类后,我们介绍与字典相关的操作。
初始化
初始化字典可以使用大括号或者dictionaryWithObject:forKey:方法,该方法有两个参数,第一个参数为值,第二参数为键。使用大括号初始化字典时键值对之间使用冒号分隔开。
还有一种常用的方法是使用dictionaryWithObjects:forKeys:方法来初始化,该方法有两个参数,参数类型都是NSArray,第一个参数表示字典中所有的值,第二个参数表示字典所有的键。该方法也可以当作是把数组转化成字典方法。
获取字典中的键和值
有时候需要获取字典中的键和值,我们可以使用allKeys方法和allValues方法,这两个方法分别返回字典中所有的键和所有的值,返回键或者值存储在NSArray类型的数组中。该方法也可以当作是把字典转化成数组的方法。
通过键获取字典中的值
刚才介绍了获取字典中所有键和值的方法,也可以获取单个的值,通常使用objectForKey:方法来实现,该方法中的参数表示字典中的键,调用该方法时将返回与参数相对应的值。除此之外,我们还可以使用中括号来获取值,我们给一个简单的示例代码:value = dictionary[key];
使用枚举遍历字典
字典的遍历可以借助字典中的键来完成,首先获取字典中所有的键然后遍历所有键,同时通过键获取到与其对应的值,这样就间接完成了字典的遍历。
看官们,字典中还有其它的操作,我们就先不详细介绍了,大家可以参考官方文档。下面是我们提供的示例代码,大家可以结合上面的理论知识来分析代码。
#include<Foundation/Foundation.h>
int main() {
//初始化字典
NSDictionary *dic1 = @{@1:@"aa",@3:@"cc",@2:@"bb"};
NSDictionary *dic2 = [NSDictionary dictionaryWithObject:@"aa" forKey:@1];
//使用数组初始化字典
NSArray *keys = [NSArray arrayWithObjects:@1,@3,@2,nil];
NSArray *values = [NSArray arrayWithObjects:@"one",@"three",@"two",nil];
NSDictionary *dic3 = [NSDictionary dictionaryWithObjects:values forKeys:keys];
//获取字典中的key和value
NSArray *allKey = [dic3 allKeys];
NSArray *allValue = [dic3 allValues];
NSLog(@"%@ key: %@ value: %@",dic1,allKey,allValue);
//通过键获取值
NSLog(@"%@, value: %@",dic2,[dic2 objectForKey:@1]);
NSLog(@"%@, value: %@",dic2,dic2[@1]);
NSLog(@"%@",dic3);
//遍历字典
for(NSString *key in allKey) {
NSLog(@" %@ : %@",key,[dic3 objectForKey:key]);
}
return 0;
}
在代码中我们添加了相关的注释,以方便大家理解代码。程序中字典的元素比较少,大家可以直接判断出运行结果,因此我们就不展示程序运行结果了,不过大家一定要自己动手运行程序,一边分析代码,一边对比程序运行结果是否符合代码分析的结果。
最后我们对本章回的内容做一个总结:
- 1.字典中的元素是键值对,键和值必须是对象类型,而且字典中不能有重复的键;
- 2.字典初始化可以使用大括号或者类提供的相关方法;
- 3.字典可以和数组进行相互转换,转换时使用相应的方法就可以;
- 4.可以获取字典中所有的键和值,也可以通过某个键获取与其对应的值,获取方法有两种;
- 5.遍历字典可以通过遍历字典的键间接实现,常用枚举的方式来遍历字典;
- 6.字典分静态和动态两种形式,以上所有的操作都不会修改原来字典中的内容;
看官们,本章回的内容就介绍到这里,欲知后事如何且听下回分解!