字典:根据一个标识,找到对应的内容
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
如果想要存很多对的时候,初始化时就要写出来
字典的基本使用:
- 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 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); // 依次打印
- }
字典是无序的
第二种遍历方式:利用block
- [dict enumerateKeysAndObjectsUsingBlock: //每遍历一个键值对就调用一次
- ^(id key, id obj, BOOLBOOL *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];
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]