【学习ios之路:Objective-C】字典.集合.

来源:互联网 发布:软件对比分析 编辑:程序博客网 时间:2024/05/20 05:25

1.不可变数据字典(NSDicionary)

字典:用来存储具有一一对应关系的数据.
一个key 对应一个 value ,key起到了唯一标示的作用,key必须是唯一的,但是一个vlaue可以对应多个key.
字典存储的是无序的元素,一对键值对组成了字典中的一个元素.

①.不可变字典初始化赋值

//笑笑语法  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);
②.求字典元素个数,即获取所有的key和value
  //获取元素的个数   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"];
③.遍历字典:取得key,和value
 //字典遍历:取得的是key,然后根据key再获取对应的value      for (NSString *temp in [dictionary1 allKeys] ) {                 NSString *value = [dictionary1 objectForKey:temp];                NSLog(@"%@ = %@",temp,value);      }
④.其他一些操作
//1.判断是否和另一个字典相同- (BOOL)isEqualToDictionary:(NSDictionary *)otherDictionary;//2.同过字典中所有的vlaue给所有的keys排序,用到block语法.- (NSArray *)keysSortedByValueUsingComparator:(NSComparator)cmptr<span><span class="comment">//3.遍历数组,通过块语法,可以对数组进行操作</span><span>  </span></span><span>- (<span class="keyword">void</span><span>)enumerateKeysAndObjectsUsingBlock:(</span><span class="keyword">void</span><span> (^)(</span><span class="keyword">id</span><span> key, </span><span class="keyword">id</span><span> obj, </span><span class="keyword">BOOL</span><span class="keyword">BOOL</span><span> *stop));  </span></span><span><span></span></span>

2.可变字典(NSMutableDictionary)

可变字典继承不可变字典,继承不可变字典内的方法,同时增加了删除,添加,修改操作.

①.创建字典对象,初始化赋值操作

//笑笑语法 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);

②向可变数据字典中,添加,删除,修改元素
//往字典中添加元素.  [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);


3,集合(NSSet和NSMutableSet)

1).集合:无序,不能添加重复元素

2).可变集合是不可变集合的子类,包含父类的所有方法,同时可变集合增加了删除,修改,添加操作.

①不可变集合常见操作.

 //初始化方法   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;



②.可变集合操作
   //创建对象      NSMutableSet *set = [NSMutableSet setWithObjects:@"aa",@"bb",@"cc",@"dd",nil];     NSMutableSet *set1 = [NSMutableSet setWithCapacity:1];   //添加     [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里面的方法.
 

常见操作

 NSCountedSet *countSet = [NSCountedSet setWithObjects:                                        @"aa",@"bb",@"cc",@"dd",@"ee",@"aa",nil];  //数组中的重复个数  NSCountedSet *count = [[NSCountedSet alloc] initWithCapacity:1];   NSUInteger count = [countSet countForObject:@"aa"]; NSLog(@"%ld",count);


//添加元素
- (void)addObject:(id)object;
//移出对象
- (void)removeObject:(id)object;

例题:有100个数,每个数取值范围为20 - 55 ,找出其中重复的数,重复次数.
    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);            }      }

总结:字典,集合.数组.的相同点和不同点
        /**         *           *  相同点:都属于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:         */



0 0
原创粉丝点击