NSSet 用法

        //集合NSSet

        //集合也是储存对象,和字典一样也是无序存储

        //集合中里面的元素不能重复

        //集合里面的元素可以随机取出

        

        //用数组放到集合中

        NSArray *a10 = @[p1 , p2 , p3 , p4 , p5];

        NSSet *set1 = [NSSet setWithArray:a10];

        

        //给集合放一个对象

        NSSet *set2 = [NSSet setWithObject:p1];

        

        //给集合放多个对象

        //如果集合里面的元素相同了,会覆盖原来的那个

        NSSet *set3 = [NSSet setWithObjects:p1 , p2 , p3 , p4 , nil];

        

        //给集合放集合

        NSSet *set4 = [NSSet setWithSet:set2];

        

        NSLog(@"%@" , set4);

        //  要打印集合中所有元素, 需要借助数组来完成

        // 把集合里面的元素取出来 放大数组里面就可以循环打印

        NSArray *array01 = [set3 allObjects];

        for (int i = 0; i < [array01 count]; i++) {

            NSLog(@"%@" , [array01 objectAtIndex:i]);

        }

        

        //既然集合里面的 元素是无序的,那么要想从集合中取出一个元素,这个元素肯定是随机的

        //从集合里面随机取出一个元素

        NSLog(@"*****************************************");

        Person *p01 = [set3 anyObject];

        NSLog(@"%@" , p01);

        

        

        //能够放相同元素的集合

        //NSCountedSet 集合中可以放相同的元素,并且能算出一个元素相同了多少次,也就是重复了多少次

        NSCountedSet *set5 = [[NSCountedSet alloc] initWithObjects:p1 , p1 , p3 , p4 , p5  , p3 , p3 , p2  , p4 , p2 , nil];

        //count 按照种类来分

        NSLog(@"%ld" , [set5 count]);

        //对集合中某一个元素种类计数

        NSLog(@"%ld" , [set5 countForObject:p3]);

        

        //可变集合

        NSMutableSet *mset1 = [NSMutableSet setWithObjects:p5 , p3 , p2 , nil];

        

        // 删除某个元素

        [mset1 removeObject:p3];

        [mset1 removeAllObjects];//删除多个元素

        NSLog(@"%@" , mset1);

        

        

        //三大容器总结

        /*

        一、相同点

         都是容器 都能存储多个元素,存储的元素都必须是对象

        二、不同点

         1、特点

           数组存储对象时有序的,元素可以重复

           字典存在一一对应关系,键值对,key值必须唯一,不能重复

           集合存储的院士是无序的,而且元素之间存在互异性

         2、取值方面

           数组 通过下标取值

           字典 通过键值key进行取值

           集合 通过anyObject随机取值

         

         3、能否利用for循环

           数组 直接利用for循环

           字典 借助allkeys数组进行for循环遍历

           集合 借助一个数组,把set集合中所有元素放进这个数组中

        */

        

      

        NSArray *array02 = @[p2 , @"a" , p2 , @"b" , p1];

        

        //循环打印数组所有元素,只打印字符串,不打印person对象

        //isKindOfClass判断一个对象是否是某一类,或者这个类的子类

        for (int i = 0; i < [array02 count];i++) {

            id p = [array02 objectAtIndex:i];

            //判断p是否是NSString类

            if ([p isKindOfClass:[NSString class]]) {

                // 如果是字符串久打印

                NSLog(@"%@" , p);

            }

        }   

        

        //isMemberOfClass判断一个对象是否是一个类,不会判断子类

        Student *s1 = [[Student alloc] initWithName:@"ddfdfjk" andAge:45];

        Student *s2 = [[Student alloc] initWithName:@"dsfu" andAge:456];

        NSArray *array03 = @[p2 , s1 , p2 , s2 , p1];

        

        for (int i = 0; i < [array03 count];i++) {

            id q = [array03 objectAtIndex:i];

            //判断p是否是NSString类

            if ([q isMemberOfClass:[Person class]]) {

            // 如果是字符串久打印

                NSLog(@"%@" , q);

            }

        }

 

转载于:https://www.cnblogs.com/fengkuangIT/p/4472206.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值