黑马程序员---NSDictionary字典

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

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

     key ----> value

     索引 ---->文字内容

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

创建NSDictionary方法:

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

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

访问字典里面的内容:

1.objectForKey方法

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

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

字典的基本使用:

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

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
     @"jack", @"name",
     @"北京", @"address",
     @"32423434", @"qq", nil]; // 可读性不好

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

NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};
    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"]; // 错误

字典的遍历:

第一种遍历方式:

NSDictionary *dict = @{
    @"address" : @"北京",
    @"name" : @"jack",
    @"name2" : @"jack",
    @"name3" : @"jack",
    @"qq" : @"7657567765"};
    
      NSArray *keys = [dict allKeys]; //把所以key拿出来放到数组中
    
        for (int i = 0; i<dict.count; i++)
        {
            NSString *key = keys[i];
            NSString *object = dict[key];// 拿出每一个key对应的value
    
            NSLog(@"%@ = %@", key, object); //  依次打印
        }
注意:字典不允许有相同的key,但允许有相同的valueObject

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

[dict enumerateKeysAndObjectsUsingBlock: //每遍历一个键值对就调用一次
     ^(id key, id obj, BOOL *stop) { 
         NSLog(@"%@ - %@", key, obj);
         
         // *stop = YES;
     }];

字典的应用:

NSArray *persons = @[
    @{@"name" : @"jack", @"qq" : @"432423423", @"books": @[@"5分钟突破iOS编程", @"5分钟突破android编程"]},
    @{@"name" : @"rose", @"qq" : @"767567"},
    @{@"name" : @"jim", @"qq" : @"423423"},
    @{@"name" : @"jake", @"qq" : @"123123213"}
    ]; // 数组每个元素都存放一个字典类
    // NSLog(@"%@", persons[1][@"qq"]); 
   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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值