字典是以键值对的形式存储数据的 key value . 字典和数组都可以相互存储
1:创建字典,不可变的
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"zhong",@"name",nil];
NSLog(@"dic %@",dic); // dic{ name= zhong;}
2:快捷创建方式
NSDictionary *dic2 = @{@"name":@"zhong",@"year":@"22"};
NSLog(@"dic2 %@",dic2); // dic2{ name= zhong;year=22;}
3:字典中可以存储任意数据类型,输出的顺序不是自然顺序
NSArray *array = @[@"one",@"two"];
NSDictionary *dic3 = @{
@"one":@"1",
@"num":[NSNumber numberWithInt:10],
@"dic":dic
@"ar1":array
};
NSLog(@"dic3 %@",dic3); // dic3{ dic = { name= zhong;}; ar1=(one,two); num=10;one=1; }
4:获得字典的长度,指的是存储的key的个数,即对象个数
NSLog(@"count %d",[dic3 count]); //NSLog(@"count %d",dic3.count);
5:从字典中取值
NSString *str = [dic3 objectForKey:@"one"]; // 1
NSDictionary *dicTmp = [dic3 objectForKey:@"dic"]; // {name=zhong;}
NSArray *arrayTmp = [dic3 objectForKey:@"ar1"]; // (one,two)
6遍历字典
//取出所有的key值
NSArray *allkeys = [dic3 allkeys]; //(one,num,dic,ar1)
for(int i = 0;i<allkeys.count;i++)
{
NSString *key = [ allkeys objectAtIndex:i];
//如果字典中存储了多种不同的类型,那么最好用id类型去接收它
id obj = [dic3 objectWithKey:key];
NSLog(@"obj %@",obj); // obj 1 obj 10 obj {name=zhong;} obj (one,two)
}
7:枚举器遍历
NSEnumerator *enumerator = [dic3 objectEnumerator];
id value;
while(value = [enumerator nextObject])
{ NSLog(@"value %@",value); // value 1 value 10 value {name=zhong;} value (one,two)
}
8:可变字典
//创建一个可变长度字典
NSMutableDictionary *muDic = [[NDMutableDictionary alloc]initWithCapacity:0];
//向字典中存储数据
[muDic setObject:@"1" forKey:@"one"];
[muDic setObject:@"2" forKey:@"two"];
[muDic setObject:@"3" forKey:@"three"];
//删除
[muDic removeObjectForKey:@"key"];
//全部删除
[muDic removeAllObjects];
//向字典中存储对象
和前面创建Person对象一样,就不多说了,直接应用
Person *p1 = [[Person alloc] initWithName:@"zhong" andAge:@"22"];
Person *p2 = [[Person alloc] initWithName:@"tang" andAge:@"20"];
Person *p3 = [[Person alloc] initWithName:@"lili" andAge:@"30"];
[muDic setObject:p1 forKey:@"d1"];
[muDic setObject:p2 forKey:@"d2"];
[muDic setObject:p3 forKey:@"d3"];
//在向字典中存储数据的时候,一定要保证key值是唯一的
//[muDic setObject:p3 forKey:@"d3"];
//[muDic setObject:p3 forKey:@"d3"];
//[muDic setObject:p3 forKey:@"d3"];
//使用for 循环遍历可变数组
NSArray *allkeys = [muDic allKeys];
for(int i = 0;i<allkeys.count;i++)
{
Person *p = [muDic objectForKey:[allkeys objectAtIndex:i];
};
//使用枚举器遍历可变数组
NSEnumerator *enumerator = [muDic objectEnumerator];
Person *tmp;
while(tmp = [enumerator nextObject])
{
NSLog(@" tmp %@",tmp);
}