OC语言基础九:OC字典

字典的结构

字典是无序集合,是由一系列key ,value键值对组成的。字典在查找数据的时候和数组不一样,数组查找数据是通过索引也就是下标,而且数组是有序的。而字典是无序的,所以要根据key去查找对应的value,而我们的Key必须确保是唯一的,也就是一个key只能对应一个value,但是value可以对应多个key。
在实际开发中,key一般是NSString类型的,写成字符串对象便于查找,如果改成自定义对象或者其他类型对象,就不便于我们查找了。
其实字典的内部实现是依据的hash表,根据hash函数映射,使我们的key能够快速得对应找到我们相应的value,所以字典的查找效率是非常高的。

不可变字典

创建

1.dictionaryWithObjectsAndKeys,value在前面

NSDictionary *dict=[NSDictionary dictionaryWithObjectsAndKeys:@"one",@"1",@"two",@"2",nil];//value和key一定是成对出现的
NSLog(@"%@",dict);

输出结果,前面放的是Key后面是value:dict {
1=one;
2=two;
}
简便方法:key在前面,加冒号,接value,每一对key和value之间用逗号分开。用的花括号{},注意数组用的方括号[]

dict=@{@“name”:@"Tom",
             @"nickname":@"tangmu",
             @"age":@12,
             @"sex":@"male"};//age是NSNumber类型

注意如果创建的时候有两个相同的key,会直接忽略掉第二个。

dict=@{@“name”:@"Tom",
             @"name":@"tangmu",
             @"age":@12,
             @"sex":@"male"};

结果九只有age=12;name=Tom;sex=male

如何通过key查找相应的value

首先确定value是什么类型的。
如果取的key不是字典中存在的key,就会直接返回一个nil。

NSString *name=[dict objectForKey:@"name"];
NSLog(@"name=%@",name);

简便方法:编译的时候会自动转换成第一种形式。

NSNumber *age=dict[@"age"];

通过value查找相应的key

一个value可以对应多个Key

dict=@{@“name”:@"Tom",
             @"nickname":@"Tom",
             @"age":@12,
             @"sex":@"male"};
             
NSArray *Keys=[dict allKeysForObject@"Tom"];//查找结果是NSArray

查找所有的key,所有的value

NSLog(@"allKeys:%@",dict.allKeys);
NSLog(@"allKeys:%@",dict.allValues);

字典的嵌套使用

所有的结构之间都能够嵌套使用,相互之间即使是不同类型的也可以嵌套。

dict=@{@"name": @"Tom",
             @"infoArray":@[@"1",@"2"],
              @"infoDict":@{@"array":@[@"1",@"2"]}
}

但是也不要随意嵌套,因为会导致语义不清晰,要根据实际的开发需要。

遍历字典

和数组类似.for in循环,遍历的是key,前面的对象是key的类型。然后根据key去查找value

NSDictionary *dict=@{@"name":@"Tom",
                  @"nickname":@"tangmu",
                  @"age":@20,
                  @"sex":@"male"
};

for (NSString *key in dict){
NSLog(@"%@:%@",key,dict[key]);
}

如果只遍历value,可以

for(id object in dict.allValues){
   NSLog(@"%@",object);
}

可变字典

创建

NSMutableDictionary *mutableDict=[NSMutableDictionary dictionary];

添加

1.将不可变字典的内容,添加到可变字典当中

NSDictionary *dict=@{@"name":@"Tom",
                  @"nickname":@"tangmu",
                  @"age":@20,
                  @"sex":@"male"
};
NSMutableDictionary *mutableDict=[NSMutableDictionary dictionary];
[mutableDict addEntriesFormDictionary:dict];

2.只添加一对键值
字典中就会增加height 170的键值对

[mutableDict setObject:@170 forKey:@"height"];

修改字典中key对应的value值

确保key是字典中存在的key,setObject就会执行修改操作,如果key不存在,setObject就会执行添加操作。

[mutableDict setObject:@30 forKey:@"age"];

删除

删除制定的key和value

[mutableDict removeObjectForKey:@"height"];

移除所有key value,结果是字典变成空的。

[mutableDict removeAllObjects];

setValue forKey的value值传nil时,对应key和value会被删掉。即如果发现value为nil,就会调用字典的removeObjectForKey方法。

[mutableDict setValue:nil forKey:@"name"];

当value不为nil,执行的是修改操作。相当于调用了setObject forKey的方法

[mutableDict setValue:@"Tim" forKey:@"name"];

所以setValue forKey是对removeObjectForKey和setObject forKey方法的一个封装。以后经常后推荐使用。
因为setObject forKey的object不小心传入了nil,程序会直接崩溃。
[mutableDict setObject:@170 forKey:@“height”];//崩溃

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值