NSDictionary/NSMutableDictionary
1.概念:字典是关键字key
以及其定义的值value1
所构成的集合,即它是由key-value组成的键值队的集合。通常来讲,key
一般是NSString
类型,value
是OC中的任意对象,对于字典来讲,我们就是通过key
来访问value
2.为什么有了数组之后还需要有字典呢?在有大量的数据或者频繁的查找信息的时候,使用字典的效率更加高。因为字典是采用键查询的优化存储方式。
3.在OC中,我们使用NSDictionary
和NSMutableDictionary
来表示字典,其中,NSMutableDictionary
是NSDictionary
的子类。
不可变字典NSDictionary
1.字典初始化
//初始化方法
NSDictionary *dictionary1 = [NSDictionary new];
NSDictionary *dictionary2 = [NSDictionary dictionary];
//创建一个键值队的字典
NSDictionary *dictionary3 = [NSDictionary dictionaryWithObject:@"zhangsan" forKey:@"name"];
//创建多个键值队的字典
NSDictionary *dictionary4 = [NSDictionary dictionaryWithObjectsAndKeys:@"zhangsan",@"name",@24,@"age",@"广州",@"address", nil];
//value 和 key成双出现
NSLog(@"dictionary = %@",dictionary4);
//根据一个字典创建一个字典
NSDictionary *dictionary5 = [NSDictionary dictionaryWithDictionary:dictionary4];
NSDictionary *dictionary6 = @{};
NSDictionary *dictionary7 = @{@"name":@"zhangsan"};
NSDictionary *dictionary8 = @{@"name":@"zhangsan",@"age":@24,@"address":@"广州"};
2.获取字典中键值队的数量
NSUInteger count = [dictionary4 count];
3.访问字典
//如何访问字典
//通过key来访问字典中的值
NSString *name = [dictionary4 objectForKey:@"name"];
NSString *newName = dictionary4[@"name"];
//字典遍历
//表示字典中所有的key
NSArray *keysArary = dictionary4.allKeys;
//表示字典中所有的value
NSArray *valuesArray = dictionary4.allValues;
for (NSString *key in keysArary) {
NSLog(@"%@:%@",key,dictionary4[key]);
}
enumerator = dictionary4.keyEnumerator;
NSString *key;
while (key = [enumerator nextObject]) {
NSLog(@"%@:%@",key,dictionary4[key]);
}
//在字典中不能存在相同的Key,能够存在相同的value
NSDictionary *dictionary9 = @{@"name":@"zhangsan",@"name":@"lisi"};
NSLog(@"dictionary9 = %@",dictionary9);
可变字典NSMutableDictionary
1.初始化方法
//1.初始化方法
NSMutableDictionary *mdictionary1 = [NSMutableDictionary dictionary];
NSMutableDictionary *mdictionary2 = [NSMutableDictionary dictionaryWithObject:@"name" forKey:@"vincent"];
NSMutableDictionary *mdictianary3 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"vincent",@"name",@24,@"age",@"广州",@"address", nil];
//没有新语法
NSMutableDictionary *mdictionary4 = [NSMutableDictionary dictionaryWithDictionary:dictionary8];
//自己独有的初始化方法
NSMutableDictionary *mdictionary5 = [NSMutableDictionary dictionaryWithCapacity:10];
NSMutableDictionary *mdictionary6 = [NSMutableDictionary dictionaryWithContentsOfFile:@""];
NSMutableDictionary *mdictionary7 = [NSMutableDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@""]];
2.不可变字典的操作
//增
[mdictionary5 setValue:@"vincent" forKey:@"name"];
[mdictionary5 setValue:@"guangzhou" forKey:@"address"];
NSLog(@"mdictionary5 = %@",mdictionary5);
//改
[mdictionary5 setValue:@"jerry" forKey:@"name"];
NSLog(@"mdictionary5 = %@",mdictionary5);
//新语法
mdictionary5[@"name"] = @"zhoudu";
NSLog(@"mdictionary5 = %@",mdictionary5);
//删
[mdictionary5 removeObjectForKey:@"name"];
[mdictionary5 removeObjectsForKeys:@[]];
[mdictionary5 removeAllObjects];