相对数组而言,字典是无序的一个集合。字典的概念:字典是由关键字’key’及其’value’所构成的无序集合。即它由key-value组成的键值对的集合。’key’一般是NSString类型,’value’是OC中的任意对象。对于字典,我们就是通过’key’来访问相应的’value’。
字典同样有不可变字典(NSDictionary)和可变字典(NSMutableDictionary)。
1.不可变字典 NSDictionary
1)创建一个空的不可变字典
NSDictionary *dictionary = [[NSDictionary alloc]init];
NSDictionary *dictionary1 = [NSDictionary dictionary];
//新语法:
NSDictionary *dictionary2 = {};
2)创建一个只有一个键值对的字典
NSDictionary *dictionary3 = [NSDictionary dictionaryWithOject:@"Gene" forKey:@"name"];
NSDictionary *dictionary4 = {@"name":@"Gene"};
3)创建含有多个键值对的字典
//字典里面value存放的是“对象”,如果是基本数据类型,要先把基本数据类型进行封装,然后放到这些集合中去
NSDictionary *dictionary5 = [NSDictionary dictionaryWithOjectsAndKeys:@"Gene",@"name",@"23",@"age",@"1111",@"phoneNumber",nil];
//新语法:创建含有多个键值对的字典
NSDictionary *dictionary5_1 = [@"name":@"Gene",@"age":@"23",@"phoneNumber":@"1111"];
4)通过一个已知的字典创建一个新字典
NSDictionary *dictionary6 = [NSDictionary dictionaryWithDictionary:dictionary5];
5)从本地文件中读取字典
NSDictionary *dictionary7 = [NSDictionary dictionaryWithContentsOfFile:@" "];
6)从网络文件中读取字典
NSDictionary *dictionary8 = [NSDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@" "]];
7)计算字典中键值对的数量
NSUInteger count = dictionary5.count;
8)通过key访问字典中对应的值
NSString *name = [dictionary5 objectForKey:@"name"];
//新语法:查找key对应的值
NSString *newName = dictionary5[@"name"];
9)遍历字典中的所有key和value
//key
NSArray *keysArray = dictionary5.allKeys;
//value
NSArray *valuesArray = dictionary5.allValues;
/*----------------for----------------------*/
for(int i = 0; i < dictionary5.count; i++){
NSLog(@"%@ = %@",keysArray[i],valuesArray[i]);
}
/*----------------for in--------------------*/
for(NSString *key in keysArray){
NSLog(@"%@ = %@",key,dictionary5[key]);
/*----------------枚举器----------------------*/
//枚举器遍历
NSEnumerator *enumerator = [keysArray objectEnumerator];
id key;
while (key = [enumerator nextObject]) {
NSLog(@"%@ = %@",key,dictionary4[key]);
}
PS:必须要注意的是,在创建一个含有多个键值对的数组时,如果某两个或几个键值对的键(key)相同,则最后的key对应的value是最开始的那一个。
例如:
NSDictionary *dictionary12 = @{@"name":@"Gene",@"age":@"25",@"address":@"GZ",@"name":@"mayun"};
for (NSString *key in dictionary12) {
NSLog(@"%@ = %@",key,dictionary12[key]);
}
输出的结果是:
2.可变字典
1)初始化一个可变字典
NSMutableDictionary *mDictionary1 = [NSMutableDictionary dictionary];
2)创建一个含有一个键值对的可变字典
NSMutableDictionary *mDictionary2 = [NSMutableDictionary dictionaryWithObject:@"Gene" forKey:@"name"];
3)创建一个含有多个键值对的可变字典
NSMutableDictionary *mDictionary3 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"Gene",@"Gene",@"23",@"age",@"GZ",@"address", nil];
4)通过另一个字典创建一个新字典
NSMutableDictionary *mDictionary4 = [NSMutableDictionary dictionaryWithDictionary:mDictionary3];
5)取字典的所有键
NSArray *keyArray = mDictionary3.allKeys;
6)取字典的所有key
NSArray *keyArray = mDictionary3.allKeys;
7)取字典的所有value
NSArray *valueArray = mDictionary3.allValues;
8)可变字典的独特初始化方法
NSMutableDictionary *mDictionary5 = [NSMutableDictionary dictionaryWithCapacity:10];
9)从本地/网络读取字典
//从本地读取字典
NSMutableDictionary *mDictionary6 = [NSMutableDictionary dictionaryWithContentsOfFile:@""];
//从网络读取字典
NSMutableDictionary *mDictionary7 = [NSMutableDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@""]];
10)对字典的一些相关操作
//增(向一个空的字典增添键值对)
[mDictionary5 setValue:@"Gene" forKey:@"name"];
[mDictionary5 setValue:@"23" forKey:@"age"];
输出结果:
//改(如果原来的字典中已经有了akey这个键,那么新加的值就会覆盖原来关键字(键)akey对应的值)
[mDictionary5 setValue:@"Jack" forKey:@"name"];
输出结果:
//改 新语法
mDictionary5[@"name"] = @"Dash";
输出结果:
在字典的操作中,可以通过相应的key,对其对应的value进行修改
//删除指定key对应的value
[mDictionary5 removeObjectForKey:@"name"];
//删除所有对象
[mDictionary5 removeAllObjects];