OC-字典

来源:互联网 发布:搜片大师源码 编辑:程序博客网 时间:2024/06/06 03:07

我们在上次讲过Cocoa提供一种集合,即数组,接下来我们将第二种集合,字典。字典和字符串、数组一样,也有可变和不可变之分

字典:NSDictionary / NSMatableDictionary

概念:字典是由关键字'key'及其定义的值(value)所构成的集合,即它是由 key-value 组成的键值对的集合.对于字典来讲,我们就是通过'key'来访问'value'.为什么在有数组之后,还需要字典?在由大量数组或者频繁的查找的时候,使用字典效率更高。因为字典采用键查询的优化存储方式。

不可变字典 NSDictionary 相关语法

//初始化,创建一个空的字典NSDictionary *dictionary1 = [[NSDictionary alloc]init];NSDictionary *dictionary2 = [NSDictionary dictionary];//创建一个只有一个键值对的字典NSDictionary *dicitonary3 = [NSDictionary dictionaryWithObject:@"jimuta" forKey:@"name"];//创建一个有多个键值对的字典NSDictionary *dictionary4 = [NSDictionary dictionaryWithObjectsAndKeys:@"jimuta",@"name",@20,@"age",@"GZ",@"address", nil];//使用一个字典去创建另一个字典NSDictionary *dictionary5 = [NSDictionary dictionaryWithDictionary:dictionary4];//注意:字典里面存放的元素都要是对象,如果是基本数据类型,要先把基本数据类型进行封装,再放进集合里面去
//使用新语法创建字典NSDictionary *dictionary6 = @{};//空的字典NSDictionary *dictionary7 = @{@"name":@"jimuta"};//一个键值对的字典NSDictionary *dictionary8 = @{@"name":@"jimuta",@"age":@25,@"address":@"GZ"};//多个键值对的字典
//从本地/网络读取字典NSDictionary *dictionary9 = [NSDictionary dictionaryWithContentsOfFile:@""];NSDictionary *dictionary10 = [NSDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@"http://www.baidu.com"]];
//查询字典中键值对的数量NSUInteger count = [dictionary4 count];
//通过key访问字典中对应的值NSString *name = [dictionary4 objectForKey:@"name"];NSString *newName = dictionary4[@"name"]; //新语法访问
//遍历字典中所有的 key 和 value ,使用 allKeys 和 allValues 遍历NSArray *keysArray = [dictionary4 allKeys];NSArray *valuesArray = [dictionary4 allValues];

使用 NSDictionary 类注意事项:

    1.创建字典的时候,字典的键和数值都要是id(即对象)类型的;    2.创建字典的时候,传进的参数是键值对,即键和对象要成对出现,最后不要玩了加一个nil;    3.在使用字典的时候,不要把字典当成可变字典使用;    4.字典的关键字(键)不要重复,如果重复了,后面的值会覆盖前面的值

可变字典 NSMutableDictionary 相关语法

//初始化   创建一个空的字典NSMutableDictionary *dictionary1 = [NSMutableDictionary dictionary];//创建一个有一个键值对NSMutableDictionary *dictionary2 = [NSMutableDictionary dictionaryWithObject:@"jimuta" forKey:@"name"];//创建一个有多个键值对NSMutableDictionary *dictionary3 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"jimuta",@"name",@"age",@25,@"GZ",@"address",nil];//根据一个字典创建一个字典NSMutableDictionary *dictionary4 = [NSDictionary dictionaryWithDictionary:dictionary3];
//可变字典独有的初始化方法NSMutableDictionary *dictionary5 = [NSMutableDictionary dictionaryWithCapacity:10];
//从本地/网络读取字典[NSMutableDictionary dictionaryWithContentsOfFile:@""];[NSMutableDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@""]];
//对字典进行操作//增[dictionary5 setValue:@"jimuta" forKey:@"name"];[dictionary5 setValue:@25 forKey:@"age"];//运行结果为:{ name = jimuta , age = 25 }
//改 使用相同语法 setValue 进行覆盖[dictionary5 setValue:@"jack" forKey:@"name"];//运行结果为:{ name = jack , age = 25 }dictionary5[@"name"] = @"leo";//新语法进行修改//运行结果为:{ name = leo , age = 25 }
//删 删除指定key的对象[dictionary5 removeObjectForKey:@"name"];//运行结果为:{age = 25}//删除所有key对象[dictionary5 removeAllObjects];//运行结果为:{}

遍历字典的方法

//创建一个不可变字典,里面存放三个键值对NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"jimuta",@"name",@20,@"age",@"GZ",@"address", nil];//遍历字典中所有的 key 和 valueNSArray *keysArray = [dictionary allKeys];NSArray *valuesArray = [dictionary allValues];//使用for循环遍历for (int i = 0; i < dictionary4.count; i++) {    NSLog(@"%@ = %@",keysArray[i],valuesArray[i]);}//时候用forin遍历for (NSString *key in keysArray) {    NSLog(@"%@ = %@",key,dictionary[key]);}//使用枚举器遍历NSEnumerator *enumrator = [keysArray objectEnumerator];id key;while (key = [enumrator nextObject]) {    NSLog(@"%@ = %@",key,dictionary[key]);}//以上三种遍历方法输出结果一样,均为:{name = jimuta,age = 20,address = GZ}
0 0