这次咱们来讲讲OC中的字典。
字典 NSDictionary /NSMutableDictionary
1.概念:字典是关键字‘key’及其定义的值(value)所构成的集合,即它是由key-value组成的键值对的集合。
‘key’一般都是‘NSString’类型的,‘value’是OC中任意对象。对于字典来讲,我们就是通过‘key’来访问‘value’。
2.为什么在有了数组之后,还需要字典?在由大量的数据或者频繁的查找的时候,使用字典效率更高。因为字典采用键查询的优化存储方式。
//初始化
//创建一个空的字典
NSDictionary *dictionary1 = [[NSDictionary alloc]init];
NSDictionary *dictionary2 = [NSDictionary dictionary];
//创建一个只有一个键值对的字典
NSDictionary *dictionary3 = [NSDictionary dictionaryWithObject:@"Jack" forKey:@"name"];
//创建一个只有多个键值对的字典
NSDictionary *dictionary4 = [NSDictionary dictionaryWithObjectsAndKeys:@"Jason",@"name",@22,@"age",@"CZ",@"address", nil];
// NSLog(@"%@",dictionary4[@"name"]);
//字典里面存放的元素都要是对象类型才行。如果基本数据类型,要先把基本数据类型进行封装,然后再放到这些集合中去。
NSDictionary *dictionary5 = [NSDictionary dictionaryWithDictionary:dictionary4];
NSLog(@"%@",dictionary5);
//新语法创建字典
NSDictionary *dictionary6 = @{};
//新语法创建只有一个键值对的字典
NSDictionary *dictionary7 = @{@"name":@"Bob"};
//新语法创建有多个键值对的字典
NSDictionary *dictionary8 = @{@"name":@"Bob",@"age":@25,@"address":@"CZ"};
//从本地读取字典
NSDictionary *dictionary9 = [NSDictionary dictionaryWithContentsOfFile:@"files"];
//从网络读取字典
NSDictionary *dictionary10 = [NSDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@""]];
//字典中键值对的数量
NSUInteger count = [dictionary4 count];
NSLog(@"%lu",count);
//如何访问字典
//通过key访问字典中对应的值
NSString *name = [dictionary4 objectForKey:@"name"];
NSLog(@"%@",name);
//新语法
NSString *newname = dictionary4[@"name"];
NSLog(@"姓名:%@",newname);
NSLog(@"姓名:%@",dictionary4[@"name"]);
//如何遍历字典中所有的key和value
//表示字典中所有的key
NSArray *keysArray = dictionary4.allKeys;
NSLog(@"%@",keysArray);
NSArray *valuesArray = dictionary4.allValues;
NSLog(@"%@",valuesArray);
// 使用for循环来打印 key = value [必须记住!!!]
for (int i=0; i<dictionary4.count; i++) { //dictionary.count 键值对数量
NSLog(@"%@ = %@",dictionary4.allKeys[i],dictionary4.allValues[i]);
// 关键字 = 值 第i个关键字=第i个值 dictionary4.allKeys[i]=dictionary.allValue[i]
}
//for in
for (NSString *key in keysArray) {
NSLog(@"%@ = %@",key,dictionary4[key]);
}
//使用枚举器遍历
NSEnumerator *enumerator = [keysArray objectEnumerator];
id key;
while (key = [enumerator nextObject]) {
NSLog(@"%@ = %@",key,dictionary4[key]);
}
NSLog(@"---------------------------");
NSDictionary *dictionary = @{@"name":@"Jason",@"age":@22,@"address":@"CZ",@"name":@"Barry"};
for (NSString *str in dictionary.allKeys){
NSLog(@"%@ = %@",str,dictionary[str]);
}
//注意:在字典中键值对是无序的
//使用NSDicgtionary注意事项
/*
1.创建字典时,字典的键和数值都要是id(即对象)类型的;
2.创建字典时,传进的参数都是键值对,即键和对象要成对出现,最后不要忘了加一个nil;
3.在使用字典时,不要把字典当成可变字典使用;
4.字典的关键字(键)不要重复,如果重复了,后面的值就会覆盖前面的值。
---[mDictionary5 setValue:@"Jason" forKey:@"name"];
---[mDictionary5 setValue:@"Jack" forKey:@"name"];
*/
#pragma —可变字典—
//可变字典 NSMutableDictionary
//1.初始化方式
//创建一个空的字典
NSMutableDictionary *mDictionary1 = [NSMutableDictionary dictionary];
//创建一个有一个键值对的可变字典
NSMutableDictionary *mDictionary2 = [NSMutableDictionary dictionaryWithObject:@"Jack" forKey:@"name"];
//创建一个有多个键值对的可变字典
NSMutableDictionary *mDictionary3 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"Jason",@"name",@22,@"age",@"CZ",@"address", nil];
//通过另一个字典创建一个字典
NSMutableDictionary *mDictionary4 = [NSMutableDictionary dictionaryWithDictionary:mDictionary3];
// mDictionary4.allKeys;
// mDictionary4.allValues;
for (NSString *str in mDictionary3.allKeys) {
NSLog(@"%@ = %@",str,mDictionary3);
}
//可变字典独有的初始化方法
NSMutableDictionary *mDictionary5 = [NSMutableDictionary dictionaryWithCapacity:10];
//从本地读取字典
[NSMutableDictionary dictionaryWithContentsOfFile:@""];
//从网络读取字典
[NSMutableDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@""] ];
//操作字典
//增
[mDictionary5 setValue:@"Jason" forKey:@"name"];
[mDictionary5 setValue:@22 forKey:@"age"];
//改(如果原来的字典中已经有了akey这个键,那么这次新加的值就会覆盖原来关键(键)akey对应的值)
[mDictionary5 setValue:@"Jack" forKey:@"name"];//Jack 覆盖了 Jason
//新语法
mDictionary5 [@"name"] = @"Barry";
//删
//删除指定key的对象
[mDictionary5 removeObjectForKey:@"name"];
//删除所有对象
[mDictionary5 removeAllObjects];
NSMutableDictionary *mDic8 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"Jack",@"name1",@22,@"age",@"CZ",@"address",@"Jack",@"name2",@"Jack",@"name3", nil];
NSArray *keysArray1 = mDic8.allKeys;
for (NSString *key in keysArray1) {
NSString *string;
// NSLog(@"%@",mDic8[key]);
[mDic8[key]isKindOfClass:[NSNumber class]]; //判断mDic8[key]中的值是否为NSNumber类型
if ([mDic8[key] isKindOfClass:[NSNumber class]]) {
int age = [mDic8 [key] intValue];
mDic8[key] = [NSString stringWithFormat:@"%d",age];
NSLog(@"%d",age);
}else{
string = mDic8[key];
}
if ([string isEqualToString:@"Jack"]) {
// NSLog(@"key = %@",key);
}
NSLog(@"key = %@",key);
字典还是比较常用的一个函数。