【学习ios之路:Object-C】字典.集合.
1.不可变数据字典(NSDicionary)
字典:用来存储具有一一对应关系的数据.
一个key 对应一个 value ,key起到了唯一标示的作用,key必须是唯一的,但是一个vlaue可以对应多个key.
字典存储的是无序的元素,一对键值对组成了字典中的一个元素.
①.不可变字典初始化赋值
<span style="font-size:18px;"> //笑笑语法 NSDictionary *dic = @{@"name":@"zhangdan",@"age":18,@"gender":@"man"}; //初始化 NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys: @"放弃",@"abandon",@"对象",@"object",@"索引",@"index", nil]; NSLog(@"%@",dictionary); //遍历构造器方法 NSDictionary *dictionary1 = [NSDictionary dictionaryWithObjectsAndKeys: @"xiaozang",@"name",@"18",@"age",@"23342432",@"phone",nil]; NSLog(@"%@",dictionary1); </span>②.求字典元素个数,即获取所有的key和value
<span style="font-size:18px;"> //获取元素的个数 NSUInteger num = [dictionary1 count]; NSLog(@"%ld",num); //获取所有的key for (NSString *temp in [dictionary1 allKeys] ) { NSLog(@"%@",temp); } NSArray *array = [dictionary1 allKeys]; NSLog(@"%@",array); //根据key获取对应的value NSString *value = [dictionary1 objectForKey:@"age"]; </span>③.遍历字典:取得key,和value
<span style="font-size:18px;"> //字典遍历:取得的是key,然后根据key再获取对应的value for (NSString *temp in [dictionary1 allKeys] ) { NSString *value = [dictionary1 objectForKey:temp]; NSLog(@"%@ = %@",temp,value); } </span>④.其他一些操作
<span style="font-size:18px;">//1.判断是否和另一个字典相同 - (BOOL)isEqualToDictionary:(NSDictionary *)otherDictionary; //2.同过字典中所有的vlaue给所有的keys排序,用到block语法. - (NSArray *)keysSortedByValueUsingComparator:(NSComparator)cmptr </span>
2.可变字典(NSMutableDictionary)
可变字典继承不可变字典,继承不可变字典内的方法,同时增加了删除,添加,修改操作.
①.创建字典对象,初始化赋值操作
<span style="font-size:18px;"> //笑笑语法 NSMutaleDicrtionary *mut = [@{@"name":@"zhangdan",@"age":12} mutableCopy]; //初始化 NSMutableDictionary *mutable = [[NSMutableDictionary alloc] init]; //便利构造器方法 NSMutableDictionary *mutable = [NSMutableDictionary dictionaryWithCapacity:1]; //便利构造器创建对象方法 NSMutableDictionary *mutable1 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"21",@"age",@"asdf",@"name",nil]; NSLog(@"%@",mutable1);</span><p><span style="font-size:18px;"> </span></p><span style="font-size:18px;"> </span>
②向可变数据字典中,添加,删除,修改元素
<span style="font-size:18px;"> //往字典中添加元素. [mutable setObject:@"13" forKey:@"age"]; NSLog(@"%@",mutable); //根据key删除对应的元素 [mutable removeObjectForKey:@"age"]; NSLog(@"%@",mutable); //修改key对应的value [mutable setObject:@"1sad8" forKey:@"age"]; NSLog(@"%@",mutable); [mutable setValue:@"17" forKey:@"age"]; //移除所有的元素 [mutable removeAllObjects]; //将字典中原来的元素替换为另一个字典中的元素 [mutable setDictionary:otherDictionary]; //快速根据key取出对应的value; NSString *s1 = dictionary[@"name"];//[dictionary objectForKey:@"name"] NSLog(@"%@",s1); NSString *s2 = dictionary[@"age"]; NSLog(@"%@",s2); </span>
3,集合(NSSet和NSMutableSet)
1).集合:无序,不能添加重复元素
2).可变集合是不可变集合的子类,包含父类的所有方法,同时可变集合增加了删除,修改,添加操作.
①不可变集合常见操作.
<span style="font-size:18px;"> //初始化方法 NSSet *set = [[NSSet alloc] initWithObjects:@"aa",@"dd",nil]; //便利构造器方法 NSSet *set = [[NSSet alloc] initWithObjects:@"aa",@"dd",nil]; <span style="font-size:18px;"> //计算元素个数 NSUInteger num = [set count]; NSLog(@"%ld",num); NSLog(@"%@",set); //获取集合中的元素 NSLog(@"%@",[set anyObject]); //快速遍历 for (NSString *temp in set) { NSLog(@"%@",temp); } //判断集合是否包含某对象 BOOL isContain = [set containsObject :@"dd"]; //判断两个集合是否相同 - (BOOL)isEqualToSet:(NSSet *)otherSet; //判断集合中的子串是否和传入的相同, - (BOOL)isSubsetOfSet:(NSSet *)otherSet; </span> </span>
②.可变集合操作
<span style="font-size:18px;"> //创建对象 NSMutableSet *set = [NSMutableSet setWithObjects:@"aa",@"bb",@"cc",@"dd",nil]; NSMutableSet *set1 = [NSMutableSet setWithCapacity:1]; <span style="font-size:18px;"> //添加 [set addObject:@"rrr"]; NSLog(@"%@",set); //删除 [set removeObject:@"aa"]; NSLog(@"%@",set); //删除所有 [set removeAllObjects]; NSLog(@"%@",set); //添加集合中的元素,通过数组 [set addObjectsFromArray:array]; //将集合中的元素替换成另一个集合的元素 [set setSet:otherSet];4.NSCountedSet</span></span><p><span style="font-size:18px;"> NSCountedSet的父类是NSMutableSet,所以继承了NSset和NSMutableSet里面的方法.</span></p>
常见操作
<span style="font-size:18px;"> NSCountedSet *countSet = [NSCountedSet setWithObjects: @"aa",@"bb",@"cc",@"dd",@"ee",@"aa",nil]; //数组中的重复个数 NSCountedSet *count = [[NSCountedSet alloc] initWithCapacity:1]; <span style="font-size:18px;"> NSUInteger count = [countSet countForObject:@"aa"]; NSLog(@"%ld",count);</span> </span>
//添加元素
- (void)addObject:(id)object;
//移出对象
- (void)removeObject:(id)object;
例题:有100个数,每个数取值范围为20 - 55 ,找出其中重复的数,重复次数.
<span style="font-size:18px;"> NSCountedSet *countSet = [NSCountedSet setWithCapacity:100]; for (int i = 0;i < 100; i++) { int random = arc4random() % (55 - 22 + 1) + 20; printf("%d ",random); [countSet addObject:@(random)]; } for (NSNumber *num in countSet) { NSUInteger count = [countSet countForObject:num];//记录重复的次数. if (count > 1) { NSLog(@"%d,重复次数为%ld",[num intValue],count); } } </span>
总结:字典,集合.数组.的相同点和不同点
<span style="font-size:18px;"> /** * * 相同点:都属于collection(集合),用来存储多个对象,并不限制对象的类型 * 不同点: * 1.作用: * 数组管理有序的集合 * 字典管理具有一一对应关系的数据集合 * 集合管理无序并且互异性的元素的集合. * 2.特点 * 数组:有序,并且元素可以重复. * 字典:无序,每一个元素都是一对键值对,一个key只能对应一个value,但是一个value可以对应多个key,key是唯一的. * 集合:无序,互异性(元素不能重复,但会记录重复次数.) * 3.取值方式: * 数组:通过下标获取对应元素. * 字典:通过key获取对用的value. * 集合:随机取值.anyObject,集合的效率最大化. * 4.快速遍历:for in遍历时不能修改遍历的集合 * 数组:遍历出来的时数组中的元素 * 字典:遍历出来的是字典中的key,通过key,取出对应的value值. * 集合:遍历出集合中的元素. * 5.创建对象的方法 1.初始化方法 2.便利构造器 * 数组 : initWithObjects: arrayWithObjects: * 字典 : initWithObjectsAndKeys: dictionaryWithObjectsAndKeys: * 集合 : initWithObjects: setWithObjects: */ </span>
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。