字典的基本概念
Foundation中的字典(NSDictionary,NSMutableDictionary)是由键-值对组成的数据集合。正如,我们在字典里查找单词的定义一样。通过Key(键),查找对应Value(值),Key通常是字符串对象,也可以是其他任意类型对象。在一个字典对象中,key的值必须是唯一的。此外,字典对象的键和值不可以为空(nil),如果需要在一个字典对象中表示一个空值,可以使用NSNull对象。
不可变字典-NSDictionary
字典的初始化
集合之中只可以用对象或者实例,而不可以使用普通的数据类型。
字典的常用方法
//获取字典数量
NSInteger count = [dic count];
//通过key获取对应的value对象
NSObject *valueObj = [dic objectForKey:@“key”];
//将字典的key转换为一个枚举对象,用于遍历
NSEnumerator *enumerator = [dic keyEnumerator];
//获取所有键的集合
NSArray *keys = [dic allKeys];
//获取所有值的集合
NSArray *values = [dic allValues];
//遍历数组 遍历性能高
for(NSString *string in array) {
NSLog(@"found %@",string);
}
//当不确定数组元素的类型时,可以选择用id
for(id string in array) {
NSLog(@"found %@",string);
}
/*****************字典的创建*****************/
NSDictionary *dic1 = [NSDictionary dictionaryWithObject:@"value" forKey:@"k1"];
NSDictionary *dic2 = [NSDictionary dictionaryWithObjectsAndKeys:@"v1",@"k1",@"v2",@"k2",@"v3",@"k3",@"v4",@"k4", @"v5",@"k5",nil];
NSDictionary *dic3 = [NSDictionary dictionaryWithDictionary:dic1];
NSLog(@"dic1:%@",dic1);
NSLog(@"dic2:%@",dic2);
NSLog(@"dic3:%@",dic3);
/******************可变字典*****************/
NSMutableDictionary *dic5 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"v1",@"key1",@"v2",@"key2",nil];
NSDictionary *dic6 = [NSDictionary dictionaryWithObject:@"v3" forKey:@"key3"];
//向字典对象5中添加整个字典对象6
[dic5 addEntriesFromDictionary:dic6];
NSLog(@"dic5:%@",dic5);
//向字典5中追加一个新的key3和value3
[dic5 setValue:@"value3" forKey:@"key3"];
NSLog(@"dic5:%@",dic5);
//初始化一个空的可变字典
NSMutableDictionary *dic7 = [NSMutableDictionary dictionary];
//将空字典7的内容设置为与字典5对象相同
[dic7 setDictionary:dic5];
NSLog(@"dic7:%@",dic7);
[dic5 removeObjectForKey:@"key1"];
NSArray *arraya = [NSArray arrayWithObjects:@"key1",nil];
[dic5 removeObjectsForKeys:arraya];
[dic5 removeAllObjects];
遍历字典
1)快速枚举
for(id key in dic){
id obj = [dic objectForKey:key];
NSLog(@“%@“,obj);
}
2)字典的一般的枚举
NSArray *keys = [dic allKeys];
int length = [keys count];
for(int i = 0; i < length; i++) {
id key = [keys objectAtIndex:i];
id obj = [dic objectForKey:key];
NSLog(“%@“,obj);
}