OC08_字典Dictionary
来源:互联网 发布:兴业证券软件优理宝 编辑:程序博客网 时间:2024/06/06 20:37
1.补充(1).容器的内存管理.Person *person = [Person alloc] init];NSMutableArray *nsMA = [NSMutableArray alloc] init];[nsMA addObject:person]; // 1 -> 2[nsMA addObject:person]; // 2 -> 3NSLog(@"%ld", person.retainCount);(结果:person的引用计数为:3);[nsMA removeObject:person]; // 3 -> 1[nsMA release];NSLog(@"%ld", person.retainCount);(结果:此时的person的引用计数为:1);[person release];(2). 容器的内存管理注意要点.①.容器的引用计数和容器内的元素无关.②.但是,当一个元素进入容器时,容器会对该元素的引用计数+1,当元素移除时,引用计数-1,当容器销毁时,容器内部的所有元素,引用计数逐个-1.2.不可变字典 (1).NSDictionarykey - value 键值对保存的value,一定是对象.key,一定唯一.NSDictionary *nsD = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];NSLog(@"%@", nsD);
(2).字面量NSDictionary *nsD2 = @{@“key1”: @“value1”, @“key2”: @“value2”};NSLog(@“%@“, nsD2);
(3).通过key数组和value数组进行创建.NSArray *keyArr = @[@"a", @"b"];NSArray *valueArr = @[@"aa", @"bb"];NSDictionary *dic = [NSDictionary dictionaryWithObjects:valueArr forKeys:keyArr];NSLog(@"%@", dic);
(4).获取所有的key.NSLog(@"allKeys:%@", dic.allKeys);
(5).获取所有的value.NSLog(@"allValue:%@", dic.allValues);
(6).通过key访问value.NSLog(@"%@", [dic objectForKey:@"b"]);(结果:b所对应的value为:bb);(7).通过字面量访问.// 字典对象名[key].NSLog(@"%@", dic[@"a"]);(结果:a所对应的value为:aa);(8).获取键值对的个数.NSLog(@"%lu %lu %lu", dic.allValues.count, dic.allKeys.count, dic.count);(7).字典的遍历.普通版.for (NSInteger i = 0; i < dic.count; i++) { NSString *key = dic.allKeys[i]; NSLog(@"%@ = %@", key, dic[key]);}
进阶版.for (NSString *key in dic.allKeys) { NSLog(@“%@ = %@“, key, dic[key]);}
完整版for (NSString *key in dic) { NSLog(@"%@ = %@", key, [dic objectForKey:key]);}
3.可变字典(1) NSMutableDictionaryNSMutableDictionary *nsMD = [NSMutableDictionary dictionary];(2).添加 & 修改①.当key不存在时,添加一对新的键值对.Person *person = [[[Person alloc] init] autorelease];[nsMD setObject:person forKey:@"person"];NSLog(@"%@", nsMD);
②.当key存在时,替换之前的value.[nsMD setObject:@"*****" forKey:@"person1"];[nsMD setObject:@"A" forKey:@"name"];[nsMD setObject:@"B" forKey:@"sex"];NSLog(@"%@", nsMD);
(3).移除.[nsMD removeObjectForKey:@"sex"];NSLog(@"%@", nsMD);
(4).移除所有对象.[nsMD removeAllObjects];NSLog(@"%@", nsMD);
4.嵌套(1).数组套数组.NSArray *array1 = @[@"teacher", @"student", @"pencil"];NSArray *array2 = @[@"soldier", array1];NSArray *array3 = @[@"AAA", array2, @"BBB"];NSLog(@"%@", array3);
(2).字典套字典.NSDictionary *dic1 = @{@"name": @"Dargon Ball"};NSDictionary *dic2 = @{@"price": @"100", @"dic": dic1};NSDictionary *dic3 = @{@"information": dic2, @"rating":@"200"};NSLog(@"%@", dic3);
(3).数组套字典.NSArray *array4 = @[@"name", @"sex"];NSDictionary *dic4 = @{@"rating": @"10"};NSArray *array5 = @[array4, dic4];NSLog(@"%@", array5);
(4).字典套数组.NSDictionary *dic5 = @{@"1": array1, @"2": array2, @"3": array5};NSLog(@"%@", dic5);
5.数组排序NSMutableArray *array = [NSMutableArray arrayWithObjects:@"cat", @"dog", @"pig", @"tiger", @"lion", nil];(1).冒泡排序for (NSInteger i = 0; i < array.count - 1; i++) { for (NSInteger j = 0; j < array.count - i - 1; j++) { if ([array[j] compare:array[j+1]] ==1) { [array exchangeObjectAtIndex:j withObjectAtIndex:j + 1]; } }}NSLog(@"%@", array);
(2).不可变数组排序.// SEL 方法选择器.// sorted 负责排序的方法.
(3).可变数组排序.[array sortUsingSelector:@selector(compare:)];NSLog(@"%@",array);
main.m6.KVC. key - value - coding 键值对编码.作用:赋值(字典->其他类的对象)使用KVC的方法赋值,必须要在相关的类中写属性,并且key值要和属性名对应.NSDictionary *dic = @{@"id":@"碟中谍5", @"rating": @8.9, @"stars": @"Tom", @"date": @"2015-9-9", @"collection": @25000, @"during": @"135min"};Movie *mv = [[[Movie alloc] init] autorelease];Movie.h@interface Movie : NSObject@property(nonatomic, retain)NSString *name;@property(nonatomic, retain)NSNumber *rating;@property(nonatomic, retain)NSString *stars;@property(nonatomic, retain)NSString *date;@property(nonatomic, retain)NSNumber *collection;@property(nonatomic, retain)NSString *during;@endMovie.m@implementation Movie// 纠错方法.如果使用KVC的方法赋值时key值没有对应上类文件中的属性,就要写一个纠错方法,该方法自动使key值与属性相对应,从而达到赋值的目的.- (void)setValue:(id)value forUndefinedKey:(NSString *)key { if ([key isEqualToString:@"id"]) { [self setValue:@"碟中谍5" forKey:@"name"];// self.name = @"碟中谍5"; }}
main.m(1).KVC赋值.[mv setValue:@"碟中谍5" forKey:@"name"]; // forKey后面必须跟属性名.NSLog(@"%@", mv.name);(结果:碟中谍5)(2).KVC取值.NSLog(@"%@, %@", mv.name, [mv valueForKey:@"name"]);(结果:碟中谍5,碟中谍5).(3).把mv中全部赋值.Movie.m- (NSString *)description {NSString *str = [NSString stringWithFormat:@"name:%@, stars:%@, collection:%@, rating:%@, date:%@, during:%@", self.name, self.stars, self.collection, self.rating, self.date, self.during]; return str;}main.m[mv setValuesForKeysWithDictionary:dic];NSLog(@"%@",dic);
0 0
- OC08_字典Dictionary
- dictionary字典
- dictionary字典
- Dictionary 字典
- dictionary字典
- Dictionary对象(字典对象)
- objective-c dictionary(字典)
- 数据字典(Data Dictionary)
- objective-c dictionary(字典)
- 数据字典(Data Dictionary)
- 字典类Dictionary复制
- C# Dictionary 字典
- Python dictionary 字典
- python Dictionary字典使用
- 浅谈DICTIONARY(字典)对象
- C# Dictionary 字典
- swift Dictionary 字典
- Python字典 (dictionary)
- 双目相机的一个例子
- PICO CTF 2013 PHP 2: 85
- poj1083
- JavaScript词法分析过程
- Apache Spark 1.5新特性介绍
- OC08_字典Dictionary
- mac常用shell命令
- AsyncTask详解 并实现实例-模拟下载
- 进程间通信之共享内存-SystemV shmxxx详解(IPC范例篇)
- 学习使用Mark Man、Axure
- java job 资源
- ReThought (一): 如何构建理想的开发团队
- Valid Number
- 啊