———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,但允许有相同的value(Object)
字典是无序的
第二种遍历方式:利用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]