NSSet和NSMutableSet介绍

NSSet集合对象是用来干什么的呢,在之前做项目中很少用,但并不是代表不好用,在追求效率优化方面NSSet要比NSArray要高的多,比如在苹果端查找数据库中的数据NSSet要比NSArray要快的多。学习了NSSet可能会发现项目中有些情况可以优化,尤其是数组遍历,判断唯一性,还有其他

  • 集合是一种哈希表,运用散列算法,查找集合中的元素比数组速度更快,但是它没有顺序。

  • 集合(NSSet)和数组(NSArray)有相似之处,都是存储不同的对象的地址;不过NSArray是有序的集合,NSSet是无序的集合。

  • 存储的所有对象只能有唯一一个,不能重复。

NSSet介绍

    NSArray *array = [[NSArray alloc] initWithObjects:@"abc",@"def", @"ghw",nil];
        NSSet *set1 = [NSSet setWithArray:array];
        NSLog(@"%@", set1);
        NSLog(@"%@",[set1 allObjects]);

打印结果:

2018-03-14 11:27:19.262887+0800 test[9761:369467] {(
    abc,
    def,
    ghw
)}
2018-03-14 11:27:19.263065+0800 test[9761:369467] (
    abc,
    def,
    ghw
)
 //两种不同的创建集合的方法
 NSSet *set2 = [[NSSet alloc]initWithObjects:@"sex",@"age",@"create",@"name",@"first",nil];
        NSSet *set3 = [NSSet setWithObjects:@"sex",@"age",@"create",@"name",@"last",@"first",nil];

        NSString *setString = [set2 anyObject];
        NSLog(@"setString %@",setString);
        NSLog(@"set2 %@",set2);
        NSLog(@"set3 %@",set3);
        NSLog(@"set2 count:%lu", [set2 count]);

运行结果:

2018-03-14 11:27:19.263101+0800 test[9761:369467] setString age
2018-03-14 11:27:19.263134+0800 test[9761:369467] set2 {(
    age,
    sex,
    first,
    name,
    create
)}
2018-03-14 11:27:19.263147+0800 test[9761:369467] set3 {(
    age,
    sex,
    first,
    name,
    last,
    create
)}
2018-03-14 11:27:19.263154+0800 test[9761:369467] set2 count:5
        //判断是否含有age字符串
        if([set2 containsObject:@"age"]) {
            NSLog(@"set2包含age");
        }
        //判断set2 是否等于set3
        if ([set2 isEqualToSet:set3]) {
            NSLog(@"set2 等于 set3");
        }else{
           NSLog(@"set2 不等于 set3");
        }
        //判断set2是否是否是set3的子集合
        if ([set2 isSubsetOfSet:set3]) {
            NSLog(@"set2 isSubsetOfSet set3");
        }
        //获取所有set2对象
        NSArray *array2 = [set2 allObjects];
        NSLog(@"array:%@", array2);

        //迭代遍历
        NSEnumerator *enumerator = [set2 objectEnumerator];
        for (NSObject *object in enumerator) {
            NSLog(@"set2里的对象:%@", object);
        }
        //遍历方法二
        for (NSString *tring in set2) {
            NSLog(@"tring set2里的对象:%@",tring);
        }

运行结果:

2018-03-14 11:27:19.263173+0800 test[9761:369467] set2包含age
2018-03-14 11:27:19.263183+0800 test[9761:369467] set2 不等于 set3
2018-03-14 11:27:19.263192+0800 test[9761:369467] set2 isSubsetOfSet set3
2018-03-14 11:27:19.263270+0800 test[9761:369467] array:(
    age,
    sex,
    first,
    name,
    create
)
2018-03-14 11:27:19.263316+0800 test[9761:369467] set2里的对象:age
2018-03-14 11:27:19.263327+0800 test[9761:369467] set2里的对象:sex
2018-03-14 11:27:19.263334+0800 test[9761:369467] set2里的对象:first
2018-03-14 11:27:19.263341+0800 test[9761:369467] set2里的对象:name
2018-03-14 11:27:19.263349+0800 test[9761:369467] set2里的对象:create
2018-03-14 11:27:19.263365+0800 test[9761:369467] tring set2里的对象:age
2018-03-14 11:27:19.263373+0800 test[9761:369467] tring set2里的对象:sex
2018-03-14 11:27:19.263380+0800 test[9761:369467] tring set2里的对象:first
2018-03-14 11:27:19.263388+0800 test[9761:369467] tring set2里的对象:name
2018-03-14 11:27:19.263396+0800 test[9761:369467] tring set2里的对象:create

NSMutableSet介绍

    *NSMutableSet只做说明,不打印测试结果,因为NSMutableSet是不断变化的*
 NSMutableSet *muSet = [NSMutableSet setWithCapacity:6];
        [muSet addObject:@"name"];
        NSSet *set4 = [NSSet setWithObjects:@"sex",@"first", @"last", nil];

        //muSet不断的变化下面的情况单一测试 不做打印结果
        //添加set数据 合并
        [muSet unionSet:set4];
        for (NSObject *object in muSet) {
            NSLog(@"all nuSet:%@",object);
        }

        NSSet *set5 = [NSSet setWithObjects:@"sex",@"first", nil];

        //在muSet中删除包含set1总数据
        [muSet minusSet:set5];
        for (NSObject *object in muSet) {

            NSLog(@"after minusSet:%@",object);
        }


        //做交集
        [muSet intersectSet:set5];
        for (NSObject *object in muSet) {

            NSLog(@"after intersectSet:%@",object);
        }

        //删除指定元素
       [muSet removeObject:@"age"];
        NSLog(@"removeObj :%@", muSet);

        //删除所有元素
        [muSet removeAllObjects];
        NSLog(@"removeObj :%@", muSet);

猜你喜欢

转载自blog.csdn.net/sun_cui_hua/article/details/79552493