黑马程序员------Foundation框架------NSDictionary字典

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------



字典:根据一个标识,找到对应的内容

     key ----> value

     索引 ---->文字内容

  里面存储的东西都是键值对

创建NSDictionary方法:

 1.NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

 根据keys就可以找到对应的objects

访问字典里面的内容:

1.objectForKey方法

[objc]  view plain copy
  1. NSDictionary *dict = [NSDictionary dictionaryWithObjects:@"jack" forKeys:@"name"];//创建了一个dict字典  
  2. id obj = [dict objectForKey:@"name"]; // 根据传入的key值找到对应的value                                                               NSLog(@"%@",obj); // 输出结果为Jack  
NSDictionary也是不可变的,所以一创建就不能在添加了

如果想要存很多对的时候,初始化时就要写出来

字典的基本使用:

[objc]  view plain copy
  1. NSArray *keys = @[@"name"@"address"];  
  2. NSArray *objects = @[@"jack"@"北京"];// 创建两个字符串,一个存放key,一个存放values  
  3. NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; // 一一对应的  
  4. </span>  
第二种创建字典的方式:

[objc]  view plain copy
  1. NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:  
  2.      @"jack"@"name",  
  3.      @"北京"@"address",  
  4.      @"32423434"@"qq", nil nil]; // 可读性不好  

第三种创建字典方式:快速创建

[objc]  view plain copy
  1. NSDictionary *dict = @{@"name" : @"jack"@"address" : @"北京"};  
  2.     id obj = [dict objectForKey:@"name"];//通过name找到对应内容为"jack"  

但是,通过  id obj = [dict objectForKey:@"name"]; 找对应的value很麻烦,所以有一个方法:

id obj = dict[@"name"] 相当于上面的方法

打印字典的个数:返回的是键值对的个数

    NSLog(@"%ld",dict.count);

NSMutableDictionary可变字典

创建方式:

NSMutableDictionary *dict = [NSMutableDictionary dictionary];    

   添加键值对

 

   [dict setObject:@"jack" forKey:@"name"];   
    [dict setObject:@"北京" forKey:@"address"];
    [dict setObject:@"rose" forKey:@"name"]; //如果多次给一个key赋值,那么最后一次的赋值会覆盖以前的值
    NSLog(@"%ld", dict.count); // 打印结果还是两个键值对,因为最后一次赋值覆盖了之前的值
     移除键值对
     [dictremoveObjectForKey:<#(id)#>]
    NSLog(@"%@", dict); //打印一个字典,就是打印键值对
   NSLog(@"%@", @[@"jack", @"rose"]); //直接打印一个数组
注意:快速创建一个字典直接用@{ },但是@{ }的返回值是不可变字典NSDictionary,如果把它赋值给了NSMutableDictionary就会报错
NSMutableDictionary *dict =@{@"name" :@"jack"};
    [dict setObject:@"rose" forKey:@"name"]; // 错误

字典的遍历:

第一种遍历方式:

[objc]  view plain copy
  1. NSDictionary *dict = @{  
  2.     @"address" : @"北京",  
  3.     @"name" : @"jack",  
  4.     @"name2" : @"jack",  
  5.     @"name3" : @"jack",  
  6.     @"qq" : @"7657567765"};  
  7.       
  8.       NSArray *keys = [dict allKeys]; //把所以key拿出来放到数组中  
  9.       
  10.         for (int i = 0; i<dict.count; i++)  
  11.         {  
  12.             NSString *key = keys[i];  
  13.             NSString *object = dict[key];// 拿出每一个key对应的value  
  14.       
  15.             NSLog(@"%@ = %@", key, object); //  依次打印  
  16.         }  
注意:字典不允许有相同的key,但允许有相同的valueObject

           字典是无序的
第二种遍历方式:利用block

[objc]  view plain copy
  1. [dict enumerateKeysAndObjectsUsingBlock//每遍历一个键值对就调用一次  
  2.      ^(id key, id obj, BOOLBOOL *stop) {   
  3.          NSLog(@"%@ - %@", key, obj);  
  4.            
  5.          // *stop = YES;  
  6.      }];  

字典的应用:

[objc]  view plain copy
  1. NSArray *persons = @[  
  2.     @{@"name" : @"jack"@"qq" : @"432423423"@"books": @[@"5分钟突破iOS编程"@"5分钟突破android编程"]},  
  3.     @{@"name" : @"rose"@"qq" : @"767567"},  
  4.     @{@"name" : @"jim"@"qq" : @"423423"},  
  5.     @{@"name" : @"jake"@"qq" : @"123123213"}  
  6.     ]; // 数组每个元素都存放一个字典类  
  7.     // NSLog(@"%@", persons[1][@"qq"]);   
  8.    NSString *bookName = persons[0][@"books"][1];   
其中:NSLog(@"%@", persons[1][@"qq"]); //先取出1位置对应的字典,再取出字典中qq这个key对应的数据
   NSString *bookName = persons[0][@"books"][1]; // 先取出0位置对应的字典,再取出字典中books这个key对应的数组中的1位置的元素
集合的总结:

 1.NSArray\NSMutableArray

 *有序

 *快速创建(不可变):@[obj1, obj2, obj3]

 *快速访问元素:数组名[i]

 2.NSSet\NSMutableSet

 *无序

 3.NSDictionary\NSMutableDictionary

 *无序

 *快速创建(不可变):@{key1 : value1,  key2 : value2}

 *快速访问元素:字典名[key]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值