NSSet练习

//NSSet和NSMutableSet是无序的, 但是它保证数据的唯一性。当插入相同的数据时,不会有任何效果。从内部实现来说是hash表,所以可以常数时间内查找一个数据。


#import <Foundation/Foundation.h>

#import "myCategory.h"


int main(int argc, const char * argv[]) {

    @autoreleasepool

    {

        //直接构造对象

        NSSet *set1 = [NSSet setWithObjects:@"this",@"is",@"one",@"test", @"best",nil];

        NSLog(@"set1 = %@",set1);

        

        NSArray *arry1 = @[@"1",@"2",@"3"];

        //使用数组构造对象

        NSSet *set2 = [NSSet setWithArray:arry1];

        NSLog(@"set2 = %@",set2);

        //使用已有set对象构造新对象

        NSSet *set3 = [NSSet setWithSet:set1];

        NSLog(@"set3 = %@",set3);

        //在已有set对象基础上增加元素构造对象

        NSSet *set4 = [set3 setByAddingObject:@"program"];

        NSLog(@"set4 = %@",set4);

        //根据已有的set对象附加另一个set对象构造新对象

        NSSet *set5 = [set2 setByAddingObjectsFromSet:set1];

        NSLog(@"set5 = %@",set5);

        

        NSArray *arry2 = @[@4,@5,@6];

        //在已有set对象基础上附加数组构造对象

        NSSet *set6 = [set2 setByAddingObjectsFromArray:arry2];

        NSLog(@"set6 = %@",set6);

        

        NSLog(@"set6 count is %lu",set6.count);

        //获取set所有对象(在数组中)并排序

        NSArray *arry3 = [[NSArray arrayWithArray:set1.allObjects]sortedArrayUsingSelector:@selector(compare:)];

        

        for(NSString *str in arry3)

            NSLog(@"arry3 have %@\n",str);

        

        id myObject;

        

        NSEnumerator *enumer = [arry3 objectEnumerator];

        

        myObject = [enumer nextObject];

        

        NSLog(@"myObject class name = %@",[myObject class]);

        

        if([myObject isKindOfClass:[NSString class]])

        {

            NSLog(@"it is kind of NSString class!");

        }

        

//        NSLog(@"arry3 content is %@",arry3);

//

//        char str[] = {"abcdefgh"};

//        

//        NSSet *set7 = [NSSet setWithObjects:(__bridge_transfer NSString *)str count:sizeof(str) / sizeof(str[0])];

        

        for(NSUInteger i = 0; i < set1.count; i++)

            NSLog(@"set1 anyobject is %@",[set1 anyObject]);

        //判断set对象中是否包含特定元素

        if([set1 containsObject:@"is"])

            NSLog(@"set1 have \"is\"");

        

        if(![set1 containsObject:@"haha"])

            NSLog(@"set not have \"haha\"");

        //创建谓词

        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF LIKE '*is'"];

        //使用谓词获取特定项并放到新的set

        NSSet *set8 = [set1 filteredSetUsingPredicate:predicate];

        

        NSLog(@"set8 = %@",set8);

        //set中每个对象发送指定消息,myDescription是自定义的类别中得方法,为方便测试用

        [set8 makeObjectsPerformSelector:@selector(myDescription)];

        

//        NSLog(@"new set8 = %@",set7);

        //set中每个对象发送指定消息,并附加参数

        [set8 makeObjectsPerformSelector:@selector(myFun:) withObject:@5];

        [set8 makeObjectsPerformSelector:@selector(myFun:) withObject:@"yes"];

        //判断参数是不是set中得对象,是的话返回该对象,否则返回nil

        if([set1 member:@"is"] != nil)

            NSLog(@"set1 have 'is'");

        //使用语句块快速枚举

        [set8 enumerateObjectsUsingBlock:^(id obj, BOOL *stop) {

            NSLog(@"set8 have [%@]",obj);

        }];

        //使用语句块并带着选项快速枚举,意义不大

        [set8 enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(id obj, BOOL *stop) {

            NSLog(@"new set8 have [%@]",obj);

        }];

        //判断是不是另一个set的子集

        if([set8 isSubsetOfSet:set1])

            NSLog(@"set8 is subset of set1");

        

        if(![set1 isSubsetOfSet:set8])

            NSLog(@"set1 is not subset of set8");

        //判断两个set是否有相同的对象

        if([set1 intersectsSet:set8])

            NSLog(@"set1 intersect with set8");

        //判断两个set中的对象是否完全相同

        if([set1 isEqualToSet:set3])

            NSLog(@"set1 is equal set3");

        

        if(![set1 isEqualToSet:set2])

            NSLog(@"set is not equql set2");

        //set中每个对象使用键-值,并生成新的set

        NSSet *set9 = [set1 valueForKey:@"length"];

        

        NSLog(@"set9 = %@",set9);

        

        NSArray *array4 = @[@1,@3,@2,@17,@12,@3,@99,@0];

        

        NSSet *set10 = [NSSet setWithArray:array4];

        

        NSLog(@"before sort set10 = %@",set10);

        //创建排序描述

        NSSortDescriptor *sortDesc = [NSSortDescriptor sortDescriptorWithKey:@"self" ascending:YES];

        //使用排序描述set对象进行排序,最终生成NSArray对象

        NSArray *sortFromSet10 = [set10 sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sortDesc, nil]];

        

        NSLog(@"sortFromSet10 = %@",sortFromSet10);

        

        

    }

    return 0;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值