zoukankan      html  css  js  c++  java
  • nsset

    Objective-C语法之NSSet和NSMutableSet

     

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

    1、NSSet的使用
    [NSSet setWithSet:(NSSet *)set]; 用另外一个set对象构造
    [NSSet setWithArray:(NSArray *)array];用数组构造
    [NSSet setWithObjects:...]:创建集合对象,并且初始化集合中的数值,结尾必需使用nil标志。
    [set count] ; 得到这个结合对象的长度。
    [set containsObject:...]: 判断这个集合中是否存在传入的对象,返回Bool值。
    [set objectEnumerator]: 将集合放入迭代器。
    [enumerator nextObject]:得到迭代器中的下一个节点数据,使用while遍历这个迭代器,方可遍历集合对象中的对象。
    [set isEqualToSet:objset]:判断两个集合是否完全相等,返回Bool值。
    [set isSubsetOfSet:objset]:判断集合中的所有数据是否都相等与objeset集合中,返回Bool值。
    [set allObjects];

    示例代码:

    1.1 以NSArray构造set

            NSArray *array = [[NSArray alloc] initWithObjects:@"对象abc",@"rongfzh", @"totogo2010",nil];
            NSSet *set3 = [NSSet setWithArray:array];
            NSLog(@"%@", set3);

    打印:

    2012-07-10 09:39:02.015 objectiveC[720:403] {(
        rongfzh,
        "U5bf9U8c61abc",
        totogo2010
    )}

    1.2 set的一些比较方法的使用。

    复制代码
    int main(int argc, const char * argv[])
    {
        @autoreleasepool {
            NSSet *set = [NSSet setWithObjects:@"25",@"age",@"张三",@"name",@"",nil];
            NSSet *set1 = [NSSet setWithObjects:@"25",@"age",@"张三",@"name",@"",@"性别",nil];
            
            NSLog(@"set count:%lu", [set count]);
            //判断是否含有age字符串
            if([set containsObject:@"age"]) {
                NSLog(@"set包含age");
            }
            //判断set 是否等于set1
            if ([set isEqualToSet:set1]) {
                NSLog(@"set 等于 set1");
            }
            //判断set是否是否是set1的子集合
            if ([set isSubsetOfSet:set1]) {
                NSLog(@"set isSubsetOfSet set1");
            }
            //获取所有set对象
            NSArray *array = [set allObjects];
            NSLog(@"array:%@", array);
            
            //迭代遍历
            NSEnumerator *enumerator = [set objectEnumerator];
            for (NSObject *object in enumerator) {
                NSLog(@"set1里的对象:%@", object);
            }
        }
        return 0;
    }
    复制代码

    打印结果:

    2012-07-10 09:50:32.018 objectiveC[939:403] set count:5
    2012-07-10 09:50:32.020 objectiveC[939:403] set包含age
    2012-07-10 09:50:32.021 objectiveC[939:403] set isSubsetOfSet set1
    2012-07-10 09:50:32.023 objectiveC[939:403] array:(
        age,
        25,
        "U7537",
        "U5f20U4e09",
        name
    )
    2012-07-10 09:50:32.027 objectiveC[939:403] set1里的对象:age
    2012-07-10 09:50:32.028 objectiveC[939:403] set1里的对象:25
    2012-07-10 09:50:32.028 objectiveC[939:403] set1里的对象:男
    2012-07-10 09:50:32.029 objectiveC[939:403] set1里的对象:张三
    2012-07-10 09:50:32.029 objectiveC[939:403] set1里的对象:name

    2、NSMutableSet的使用

    NSMutableSet继承NSSet,它可以使用NSSet的方法。

    [NSMutableSet setWithCapacity:6]:创建可变集合对象,并且初始化长度为6。
    [set addObject: obj] : 向集合中动态的添加对象。
    [set removeObject:obj]:删除集合中的一个对象。
    [set removeAllObjects]:删除集合中的所有对象。
    [set unionSet:obj]:向集合中添加一个obj集合的所有数据。
    [set minusSet:obj]:向集合中删除一个obj集合的所有数据。
    [set intersectSet]:向集合中删除一个不包含obj集合的所有数据。

    复制代码
    int main(int argc, const char * argv[])
    {
        @autoreleasepool {
            NSMutableSet *muSet = [NSMutableSet setWithCapacity:6];
            [muSet addObject:@"对象1"];
            NSSet *set = [NSSet setWithObjects:@"对象2",@"对象3", @"被企鹅咬了一口", nil];
            //添加set数据
            [muSet unionSet:set];
            for (NSObject *object in muSet) {
                NSLog(@"all nuSet:%@",object);
            }
            NSSet *set1 = [NSSet setWithObjects:@"对象2",@"对象3", nil];
            
            //在muSet中删除包含set1总数据
            [muSet minusSet:set1];
            for (NSObject *object in muSet) {
                NSLog(@"after minusSet:%@",object);
            }
                
        }
        return 0;
    }
    复制代码

    打印结果:

    2012-07-10 10:09:08.194 objectiveC[1156:403] all nuSet:对象1
    2012-07-10 10:09:08.196 objectiveC[1156:403] all nuSet:被企鹅咬了一口
    2012-07-10 10:09:08.196 objectiveC[1156:403] all nuSet:对象2
    2012-07-10 10:09:08.197 objectiveC[1156:403] all nuSet:对象3
    2012-07-10 10:09:08.198 objectiveC[1156:403] after minusSet:对象1
    2012-07-10 10:09:08.198 objectiveC[1156:403] after minusSet:被企鹅咬了一口

     

  • 相关阅读:
    【BZOJ 4581】【Usaco2016 Open】Field Reduction
    【BZOJ 4582】【Usaco2016 Open】Diamond Collector
    【BZOJ 4580】【Usaco2016 Open】248
    【BZOJ 3754】Tree之最小方差树
    【51Nod 1501】【算法马拉松 19D】石头剪刀布威力加强版
    【51Nod 1622】【算法马拉松 19C】集合对
    【51Nod 1616】【算法马拉松 19B】最小集合
    【51Nod 1674】【算法马拉松 19A】区间的价值 V2
    【BZOJ 2541】【Vijos 1366】【CTSC 2000】冰原探险
    【BZOJ 1065】【Vijos 1826】【NOI 2008】奥运物流
  • 原文地址:https://www.cnblogs.com/yulang314/p/3675579.html
Copyright © 2011-2022 走看看