字典,数组,集合区别

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;">  
   //<span style="padding: 0px; color: black; background-color: rgb(255, 153, 153);">字典</span>遍历:取得的是key,然后根据key再获取对应的value
      for (NSString *temp in [dictionary1 allKeys] ) {
                 NSString *value = [dictionary1 objectForKey:temp];
                NSLog(@"%@ = %@",temp,value);
      }

</span>
④.其他一些操作
<span style="font-size:18px;">//1.判断是否和另一个<span style="padding: 0px; color: black; background-color: rgb(255, 153, 153);">字典</span>相同
- (BOOL)isEqualToDictionary:(NSDictionary *)otherDictionary;

//2.同过<span style="padding: 0px; color: black; background-color: rgb(255, 153, 153);">字典</span>中所有的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;">  
  //往<span style="padding: 0px; color: black; background-color: rgb(255, 153, 153);">字典</span>中添加元素.
  [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];
  
  //将<span style="padding: 0px; color: black; background-color: rgb(255, 153, 153);">字典</span>中原来的元素替换为另一个<span style="padding: 0px; color: black; background-color: rgb(255, 153, 153);">字典</span>中的元素
  [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.作用:
         *   数组管理<a target=_blank name="baidusnap6" style="padding: 0px; color: rgb(51, 51, 51);"></a><span style="padding: 0px; color: white; background-color: rgb(0, 170, 0);">有序的</span>集合
         *   <span style="padding: 0px; color: black; background-color: rgb(255, 153, 153);">字典</span>管理具有一一对应关系<span style="padding: 0px; color: black; background-color: rgb(255, 102, 255);">的数据</span>集合
         *   集合管理无序并且互异性的元素的集合.
         *   2.特点
         *   数组:有序,并且元素可以重复.
         *   <span style="padding: 0px; color: black; background-color: rgb(255, 153, 153);">字典</span>:无序,每一个元素都是一对键值对,一个key只能对应一个value,但是一个value可以对应多个key,key是唯一的.
         *   集合:无序,互异性(元素不能重复,但会记录重复次数.)
         *   3.取值方式:
         *   数组:通过下标获取对应元素.
         *   <span style="padding: 0px; color: black; background-color: rgb(255, 153, 153);">字典</span>:通过key获取对用的value.
         *   集合:随机取值.anyObject,集合的效率最大化.
         *   4.快速遍历:for in遍历时不能修改遍历的集合
         *   数组:遍历出来的时数组中的元素
         *   <span style="padding: 0px; color: black; background-color: rgb(255, 153, 153);">字典</span>:遍历出来的是<span style="padding: 0px; color: black; background-color: rgb(255, 153, 153);">字典</span>中的key,通过key,取出对应的value值.
         *   集合:遍历出集合中的元素.
         *   5.创建对象的方法 1.初始化方法         2.便利构造器
         *    数组 :  initWithObjects:         arrayWithObjects:
         *    <span style="padding: 0px; color: black; background-color: rgb(255, 153, 153);">字典</span> :  initWithObjectsAndKeys:  dictionaryWithObjectsAndKeys:
         *    集合 :  initWithObjects:         setWithObjects:
         */

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值