字典有一对key-value组成,二者必须成对出现
打印结果是{}是字典,()是数组,{()}是集合
如果键值没有成对出现,会崩溃
reason: '-[__NSPlaceholderDictionary initWithObjectsAndKeys:]: second object of each pair must be non-nil. Or, did you forget to nil-terminate your parameter list?'
1.不可变字典
创建一个字典对象
NSDictionary *dic = [[NSDictionary alloc] initWithObjectsAndKeys:@"zhangsan", @"name", @"男", @"sex", @"玩", @"hobby", nil];
// NSLog(@"%@", dic);
// 打印一个字典有中括号,数组用小括号代表,而且字典是一个无序的容器
// 便利构造器创建一个字典的对象
// 都是先写value,再写key,防止少写
// NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"何岸", @"name", @"25", @"age", @"胖", @"hobby", nil];
// 字面量
// 冒号前面的是key,冒号后面的是Value
// NSDictionary *dic1 = @{@"1":@"2", @"3":@"4", @"5":@"6"};
// NSLog(@"%@", dic1);
</pre><pre name="code" class="objc">// // count是键值对数
// NSLog(@"%ld", dic1.count);
// 根据对应的key进行取值
// NSLog(@"%@", [dic1 objectForKey:@"1"]);
// // allKeys是一个属性,返回值类型是NSArray,获取字典所有的key值
// NSLog(@"%@", dic1.allKeys);
// // allValue获取字典所有的value
// NSLog(@"%@", dic1.allValues);
for(NSInteger i = 0; i < dic1.count; i++){
// NSLog(@"%@ = %@", dic1.allKeys[i], [dic1 objectForKey:dic1.allKeys[i]]);
// }
//
// for (NSString *str in dic1.allKeys) {
// NSLog(@"%@ = %@", str, [dic1 objectForKey:str]);
// }
不可变字典
创建一个空字典
// NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
// 便利构造器
// NSMutableDictionary *dic = [NSMutableDictionary dictionary];
添加一个键值对:setObject
如果字典里没有对应操作的key,这个方法就是添加键值对的作用,如果有就是修改键值对的功能
// [dic setObject:@"何岸" forKey:@"name"];
// NSLog(@"%@", dic);
// 想修改name的值
// [dic setObject:@"app" forKey:@"name"];
// NSLog(@"%@", dic);
字典中只能有一个key值
删除
// 把key和value成对的删除
// [dic removeObjectForKey:@"name"];
// NSLog(@"%@", dic);
字典和数组的互相嵌套
NSDictionary *dic1 = @{@"name":@"zhangsan", @"age":@"10"};
// NSDictionary *dic2 = @{@"name":@"lisi", @"age":@"13"};
// NSDictionary *dic = @{@"dic1":dic1, @"dic2":dic2};
// // 遍历
// for (NSString *str in dic) {
// // 找value
// NSDictionary *temp = [dic objectForKey:str];
// for (NSString *str in temp) {
// NSLog(@"%@", [temp objectForKey:str]);
// }
//
// }
// 数组套字典
// NSArray *arr = @[dic1, dic2];
// for (NSDictionary *dic in arr) {
// for (NSString *str in dic) {
// NSLog(@"%@", [dic objectForKey:str]);
// }
// }
// 字典套数组
// NSArray *arr1 = @[@"松江", @"卢俊义", @"吴用", @"公孙胜"];
// NSArray *arr2 = @[@"关胜", @"林冲", @"秦明", @"呼延灼"];
// NSArray *arr3 = @[@"花荣", @"柴进", @"李英", @"朱仝"];
// NSDictionary *dic = @{@"arr1":arr1, @"arr2":arr2, @"arr3":arr3};
// for (NSString *str in dic) {
// NSArray *temp = [dic objectForKey:str];
// for (NSString *str in temp) {
// NSLog(@"%@", str);
// }
// }
// 三层嵌套
// NSArray *arr1 = @[@"松江", @"卢俊义", @"吴用", @"公孙胜"];
// NSArray *arr2 = @[@"关胜", @"林冲", @"秦明", @"呼延灼"];
// NSArray *arr3 = @[@"花荣", @"柴进", @"李英", @"朱仝"];
// NSArray *arr4 = @[@"徐晃", @"张辽", @"许褚", @"典韦"];
// NSArray *arr5 = @[@"马腾", @"马超", @"马岱", @"马铁"];
//
// NSDictionary *dic1 = @{@"arr1":arr1, @"arr2":arr2};
// NSDictionary *dic2 = @{@"arr3":arr3, @"arr4":arr4};
// NSDictionary *dic3 = @{@"arr5":arr5};
// NSArray *arr = @[dic1, dic2];
// for (NSDictionary *dic in arr) {
// for (NSString *str in dic) {
// NSArray *temp = [dic objectForKey:str];
// for (NSString *str in temp) {
// NSLog(@"%@", str);
// }
// }
// }
// NSArray *arr1 = @[@"松江", @"卢俊义", @"吴用", @"公孙胜"];
// NSArray *arr2 = @[@"关胜", @"林冲", @"秦明", @"呼延灼"];
// NSArray *arr3 = @[@"花荣", @"柴进", @"李英", @"朱仝"];
// NSArray *arr4 = @[@"徐晃", @"张辽", @"许褚", @"典韦"];
// NSArray *arr5 = @[@"马腾", @"马超", @"马岱", @"马铁"];
// NSArray *bigArr1 = @[arr1, arr2];
// NSArray *bigArr2 = @[arr3, arr4, arr5];
// NSDictionary *dic = @{@"big1":bigArr1, @"big2":bigArr2};
// for (NSString *str in dic) {
// NSArray *arr = [dic objectForKey:str];
// for (NSArray *tempArr in arr) {
// for (NSString *strArr in tempArr) {
// NSLog(@"%@", strArr);
// }
// }
// }
集合
不可变集合
集合的创建和数组差不多,用便利构造器创建一个集合对象,集合里的元素不可以重复,如果重复,那么重复的部分将被删除
这是最重要的应用:利用集合的没有重复元素的特点,会把数组变成集合,去掉重复的部分再转换回来
// 将数组中重复的元素去除
// NSArray *arr = @[@"8", @"1", @"2", @"3", @"1", @"3"];
// NSSet *set = [NSSet setWithArray:arr];
// NSLog(@"%@", set);
// // allObject属性是将集合转换成数组的作用
// NSArray *newArr = set.allObjects;
// NSLog(@"%@", newArr);
NSLog(@"%ld", set2.count);
// // 返回一个元素,但是不保证是一个随机的数
// NSLog(@"%@", [set anyObject]);
// // 判断集合里有没有元素
// BOOL result = [set containsObject:@"d"];
// NSLog(@"%d",result);
遍历
// for进行遍历
// for (NSString *str in set) {
// NSLog(@"%@", str);
// }
//
// for(NSInteger i = 0; i < set.count; i++){
// NSLog(@"%@", set.allObjects[i]);
// }