将数据以键值对的形式储存起来,取值的时候通过KEY就可以直接拿到对应的值在Objective - C语言中字典就是做这个事情的,键值对的值和键都是任意的对象,但是键往往使用字符串。字典存储对象的地址没有顺序。
一、创建不可变字典
1、 NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"One",@"1",@"Two",@"2",@"Three",@"3",nil];
使用键值对初始化字典对象,结尾必需使用nil标志结束。
2、 NSDictionary *dict = [NSDictionary dictionaryWithObject:@"obj" forKey:@"key"];
NSArray *object = @[@"obj1",@"obj2",@"obj3"];
NSArray *key = @[@"key1",@"key2",@"key3"];
dict = [NSDictionary dictionaryWithObjects:object forKeys:key];
NSLog(@"%@",dict);
3、NSDictionary *dict = @{@"k1" : @"obj1" , @"k2" : @"obj2" , @"k3" : @"obj3"}; //把key写前面,末尾不用加nil
//count是计算有多少个键值对
NSLog(@"count = %zi",dict.count);
二、字典一些方法
//根据指定的key找到对应的值
id obj = [dict objectForKey:@"k2"];
NSLog(@"%@", obj);
//将字典写入文件中
NSString *path = @"/Users/lijun/Desktop/dict.xml";
[dict writeToFile:path atomically:YES];
//从文件中读取内容
NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:path];
NSLog(@"dic=%@",dic);
//返回所有的key
NSArray *keys = [dict allKeys];
//返回所有的值
NSArray *objc = [dict allValues];
//根据多个key取出对应的多个value当key找不到对应的value时,用marker参数值代替
objc = [dict objectsForKeys:[NSArray arrayWithObjects:@"key1",@"key2",@"k",nil] notFoundMarker:@"notFound"];
NSLog(@"objc = %@",objc);
三、字典的遍历
1、快速遍历
void dictSort1()
{
NSArray *object = @[@"obj1",@"obj2",@"obj3"];
NSArray *key = @[@"key1",@"key2",@"key3"];
NSDictionary *dict = [NSDictionary dictionaryWithObjects:object forKeys:key];
for (id key in dict)
{
id objc = [dict objectForKey:key];
NSLog(@"%@= %@",key,objc);
}
}
2、迭代器
void dictSort2()
{
NSArray *object = @[@"obj1",@"obj2",@"obj3"];
NSArray *key = @[@"key1",@"key2",@"key3"];
NSDictionary *dict = [NSDictionary dictionaryWithObjects:object forKeys:key];
//key迭代器
NSEnumerator *enumer = [dict keyEnumerator];
id keys = nil;
while (keys = [enumer nextObject])
{
id values = [dict objectForKey:keys];
NSLog(@"%@= %@",values,keys);
}
//object迭代器
NSEnumerator *objEnumer = [dict objectEnumerator];
}
3、用block遍历
void dictSort3()
{
NSArray *object = @[@"obj1",@"obj2",@"obj5"];
NSArray *key = @[@"key1",@"key2",@"key3"];
NSDictionary *dict = [NSDictionary dictionaryWithObjects:object forKeys:key];
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
NSLog(@"%@=%@",key,obj);
}];
}