Objective-C---5---字典,集合
2015-09-29 14:40
369 查看
1. 字典:
1.1 不可变字典:
1.1.1 不可变字典的创建:
#pragma mark-------不可变字典 { // NSDictionary 字典:一个索引对应一个值 // 一旦创建,不可改变 // 1. 创建一个空字典:创建不可变的空字典是无意义的 NSDictionary *dic1 = [NSDictionary dictionary]; // 2. 创建一组键值对的字典: //key:zw value:zhangwei NSDictionary *dic2 = [NSDictionary dictionaryWithObject:@"zhangwei" forKey:@"zw"]; // 3. 创建多组键值对的字典:-----<span style="color:#CC0000;">这个创建方法是先写value 再写key</span> NSDictionary *dic3 = [NSDictionary dictionaryWithObjectsAndKeys:@"one", @"k1", @"two", @"k2", @"three", @"k3", nil]; /* 字典中的元素是以键值对的形式存储的,@“one”和@“k1”组成一组键值对 键值对的值(value)和键(key),可以是(id)任意的对象,键通常是字符串 字典和数组一样,存储的是对象的地址,但是数组中对象的地址是有序的,字典中对象地址是无序的 */ NSLog(@"%@",dic1); NSLog(@"%@",dic2); NSLog(@"%@",dic3); // 4. 快速创建一个字典:-----<span style="color:#CC0000;">这个创建方法是先写key 后写value</span> // @{... key键:value值...}成对出现, // key键不能重复,若重复不会报错,但是后写入的key键不显示。 NSDictionary *dic5 = @{ @"zhc":@"zhanghongchao", @"lb":@"liubo", @"lb":@"libo", @"lyc":@"liyachao" }; NSLog(@"%@", dic5); }
1.1.2 不可变字典的基本用法:
#pragma mark-------字典的基本用法 { NSDictionary *dic4 = @{ @"zsf":@"zhangsanfeng", @"lhl":@"liuhulan", @"xlz":@"xiaolizi", @"xlfd":@"xiaolifeidao" }; NSLog(@"%@", dic4); // 1. 获取字典的元素个数 NSLog(@"%ld", [dic4 count]); // 2. 根据key键获取value值 NSString *str = [dic4 objectForKey:@"xlz"]; NSLog(@"%@", str); // 3.1 遍历: for循环,首先遍历出来的是key------再通过key寻找value for (NSString *key in dic4) { NSLog(@"%@", key); NSString *s = [dic4 objectForKey:key]; // 根据key遍历value NSLog(@"%@", s); } // 3.2 遍历2: NSEnumerator *enumrator = [dic4 keyEnumerator]; id obj; while (obj = [enumrator nextObject]) { NSLog(@"%@", obj); NSString *s = [dic4 objectForKey:obj]; NSLog(@"%@", s); } // 3.3 遍历3: <span style="color:#CC0000;">[dic4 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { NSLog(@"%@, %@", key, obj);</span> }]; // 4. 创建及获取简单用法: NSDictionary *dic = @{@"zw":@"zhangwei", @"zsf":@"zhangsanfeng", @"dc":@"dengchao", @"hzw":@"haizeiwang"}; NSLog(@"%@", dic[@"hzw"]); // 5. 读写文件 BOOL isWrite = [dic writeToFile:@"/Users/lanou3g/Desktop/dic.plist" atomically:YES]; // @"/Users/lanou3g/Desktop/dic.plist" 这一堆指的是你的文件存放的路径 if (isWrite) { NSLog(@"成功"); }else{ NSLog(@"失败"); } <span style="color:#CC0000;">NSDictionary *readDic = [NSDictionary dictionaryWithContentsOfFile:@"/Users/lanou3g/Desktop/dic.plist"]; // 读完之后遍历 也可以直接打印的时候读取 NSLog(@"%@", readDic);</span> }
练习:
#pragma mark-------练习 /* 山东菜 煎饼、扒鸡 东北菜 杀猪菜、大拌菜 */ { NSArray *sdArray = [NSArray arrayWithObjects:@"jianbing", @"paji", nil]; NSArray *dbArray = [NSArray arrayWithObjects:@"shazhucai", @"dabancai", nil]; NSDictionary *menu = @{@"sdc":sdArray, @"dbc":dbArray}; NSLog(@"%@", menu); [menu writeToFile:@"/Users/lanou3g/Desktop/menu.plist" atomically:YES]; NSLog(@"%@",[NSDictionary dictionaryWithContentsOfFile:@"/Users/lanou3g/Desktop/menu.plist"]); }
1.2 可变字典:
#pragma mark-------可变字典 { // NSMutableDictionary 继承父类NSDictionary的方法 // 1. 创建空字典: NSMutableDictionary *dic = [NSMutableDictionary dictionary]; // 2. 创建指定长度的字典: NSMutableDictionary *dic1 = [NSMutableDictionary dictionaryWithCapacity:3]; // 3.1 给可变字典添加键值对: [dic setValue:@"haojian" forKey:@"hj"]; [dic setValue:@"chunxiao" forKey:@"cx"]; [dic setValue:@"jianbingxia" forKey:@"jbx"]; // 3.2 删除 [dic removeObjectForKey:@"cx"]; NSLog(@"%@", dic); // 3.3 改值,根据key改value [dic setObject:@"chengxue" forKey:@"cx"]; dic[@"cx"] = @"chunxiao"; // 简单的修改方法 NSLog(@"%@", dic); // 3.4 通过利用数组接收key值 来判断是否包含某个键值 NSArray *arr = [dic allKeys]; if ([arr containsObject:@"zj"]) { NSLog(@"包含"); }else NSLog(@"不包含"); /* <span style="color:#CC0000;">数组创建通过[],访问通过下标; 字典创建通过{},访问通过key</span> */ }
2. 集合
2.1 NSSet:
{ // NSSet集合: 采用一种算法,可以快速的找到集合中的元素 数组有序 集合无序 // 集合中存储的元素是对象 // 1. 创建一个集合 NSSet *set = [[NSSet alloc] initWithObjects:@"one", @"two", @"three", @"four", nil]; NSLog(@"%@",set); // 2. 获取集合中元素个数 NSLog(@"%ld", set.count); // 3. 获取集合中的第一个元素 NSLog(@"%@", [set anyObject]); // 4. 查找元素是否包含在集合中 BOOL res = [set containsObject:@"one"]; NSLog(@"%d",res); // 5.1 判断两个集合是否相等 // 判断的时候,只要元素一样就可以啦,顺序不一样也是相同的,不可以重复录入 NSSet *set2 = [[NSSet alloc] initWithObjects:@"four", @"two", @"three", @"one", @"one", nil]; BOOL res2 = [set isEqualToSet:set2]; if (res2) { NSLog(@"same"); // 结果输出是same 因为重复的不会被写入,只写一个 所以set与set2一样 }else{ NSLog(@"no"); } // 5.2 判断set与set2的子集合: BOOL res3 = [set isSubsetOfSet:set2]; NSLog(@"%d",res3); // set与set2的子集合是相等的 set2包含了set里的内容... // 6. 遍历 <span style="color:#CC0000;">通过枚举器</span> NSEnumerator *enumrator = [set objectEnumerator]; NSString *str; while (str = [enumrator nextObject]) { NSLog(@"%@", str); } [set release]; [set2 release]; }
数组与集合:
{ // 1. 通过数组创建集合: 创建数组---赋给集合 NSArray *array = [NSArray arrayWithObjects:@1, @2, @3, @4, @5, nil]; NSSet *set = [NSSet setWithArray:array]; NSLog(@"%@",set); // 2. 使用数组接收集合中的元素 取出元素---赋给数组 NSArray *array1 = [set allObjects]; NSLog(@"%@",array1); }
2.2 可变集合:NSMutableSet
#pragma mark---------可变集合 { // 创建空集合 NSMutableSet *set = [NSMutableSet set]; // 添加单个元素 [set addObject:@1]; [set addObject:@2]; [set addObject:@3]; [set addObject:@4]; NSLog(@"%@", set); // 添加多个元素 NSSet *set2 = [NSSet setWithObjects:@5, @6, @7, nil]; [set unionSet:set2]; // <span style="color:#990000;">将set2中的元素给set</span> NSLog(@"%@",set); [set minusSet:set2]; // <span style="color:#990000;">从set中删除set2的内容</span> NSLog(@"%@",set); // 删除 [set removeObject:@1]; NSLog(@"%@",set); }
2.3 NSCountedSet:
能记录集合中元素重复次数:在set的基础上添加了计数功能:
#pragma mark---------NSCountedSet { // 创建一个NSCountedSet对象 NSCountedSet *countedset = [NSCountedSet setWithObjects:@1, @2, @3, @4, @5, @2, @3, @6, @4, nil]; NSLog(@"%@", countedset); // <span style="color:#990000;">记录某个元素出现的次数:</span> NSUInteger count = [countedset countForObject:@3]; NSLog(@"%lu", count); }
3. 快速枚举:
for (<#type *object#> in <#collection#>) { <#statements#> }object是遍历得到的元素对象。
collection是集合类型的对象:数组、字典、集合。
数组枚举:得到数组中的元素对象。
字典枚举:得到字典中的key值。
集合枚举:得到集合中的元素对象。
相关文章推荐
- CreateEvent、SetEvent、ResetEvent和WaitForSingleObject
- 黑马程序员—常见API+String类+Random类+Object类
- Objective-C内存管理
- JSP解析JSONObject类型对象出现null object异常解决方案
- Jackson 高性能的JSON处理 ObjectMapper
- Objective-C 多参数成员函数
- java中公共类object的方法总结
- Objective-C 类声明,定义,实例,初始化
- OBJ-C中dispatch_once的用法
- [python错误]builtins.AttributeError: 'module' object has no attribute 'request'
- 今天和大家分享下OC中的类的存储位置
- ios 小例子,汽车和轮胎,来自object-c基础教程。
- IOS之KVC机制(Object-C篇)
- OC-NSARRAY-NSMUTABLEARRAY
- 复杂对象写入文件--就是自己写的继承自NSObject类的子类
- String s = new String("xyz");创建了几个String Object?
- 实例变量的修饰符
- Django: 'module' object has no attribute 'index'
- AttributeError: 'WebDriver' object has no attribute
- ARC Objective-c的内存管理