NSSet Class Reference

        NSSet和NSMutableSet是管理无序集合的对象。NSSet管理不可变集合,NSMutableSet管理可变集合。通过NSSet创建的集合,当它被创建时,就代表这个集合内的数据是不可改变的。
        当你不关心集合中元素的顺序,只关心每个元素在整个集合中是唯一的时候,你可以使用NSSet或NSMutableSet。

关于NSMutableSet的编程介绍详见《NSMutableSet Class Reference

        NSSet内部结构图如下所示:
set


创建Set

+ set
+ setWithArray:
+ setWithObject:
+ setWithObjects:
+ setWithObjects:count:
+ setWithSet:
- setByAddingObject:
- setByAddingObjectsFromSet:
- setByAddingObjectsFromArray:

#pragma mark 创建Set
- (void)testCreating {

    // 空set
    NSSet *set = [NSSet set];

    // 通过数组
    NSArray *array = [NSArray arrayWithObjects:@"阳君", @"937447974", @"937447974", nil];
    set = [NSSet setWithArray:array];

    // 只包含一个元素
    set = [NSSet setWithObject:@"阳君"];

    // 多个初始化
    set = [NSSet setWithObjects:@"阳君", @"937447974", nil];

    // 通过NSSet
    set = [NSSet setWithSet:set];

    // 增加一个元素
    set = [set setByAddingObject:@"937447974"];

    // 通过NSSet增加元素
    set = [set setByAddingObjectsFromSet:set];

    // 通过NSArray增加元素
    set = [set setByAddingObjectsFromArray:array];

}

 

初始化Set

- initWithArray:
- initWithObjects:
- initWithObjects:count:
- initWithSet:
- initWithSet:copyItems:
- init

#pragma mark 初始化Set
- (void)testInit {

    NSArray *array = [NSArray arrayWithObjects:@"阳君", @"937447974", nil];

    // 空set
    NSSet *set = [[NSSet alloc] init];

    // 通过数组
    set = [[NSSet alloc] initWithArray:array];

    // 多个初始化
    set = [[NSSet alloc] initWithObjects:@"阳君", @"937447974", nil];

    // 通过set
    set = [[NSSet alloc] initWithSet:set];
    set = [[NSSet alloc] initWithSet:set copyItems:YES];

}

 

计算条目

count Property

#pragma mark 计算条目
- (void)testCountingEntries {

    NSSet *set = [NSSet setWithObjects:@"阳君", @"937447974", nil];
    NSLog(@"count:%d", set.count);

}

 

访问Set成员

allObjects Property
- anyObject
- containsObject:
- filteredSetUsingPredicate:
- makeObjectsPerformSelector:
- makeObjectsPerformSelector:withObject:
- member:
- objectEnumerator
- enumerateObjectsUsingBlock:
- enumerateObjectsWithOptions:usingBlock:
- objectsPassingTest:
- objectsWithOptions:passingTest:

#pragma mark 访问Set成员
- (void)testAccessingSetMembers {

     NSSet<NSString *> *set = [NSSet setWithObjects:@"阳君", @"937447974", nil];

    // 所有成员
    NSArray *array = set.allObjects;
    NSLog(@"allObjects:%@", array);

    // 随机获取
    NSString *anyObject = [set anyObject];

    // 是否存在某个对象
    BOOL containsObject = [set containsObject:anyObject];
    NSLog(@"containsObject:%d", containsObject);

    // 通过过滤器过滤
    NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id  _Nonnull evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) {
        return YES;
    }];
    set = [set filteredSetUsingPredicate:predicate];

    // block 过滤
    set = [set objectsPassingTest:^BOOL(NSString * _Nonnull obj, BOOL * _Nonnull stop) {
        return YES;
    }];

    // block 过滤, 并设置并发模式
    set = [set objectsWithOptions:NSEnumerationConcurrent passingTest:^BOOL(NSString * _Nonnull obj, BOOL * _Nonnull stop) {
        return YES;
    }];

    // 给每个成员发送消息
    [set makeObjectsPerformSelector:@selector(length)];

    // 给每个成员发送消息并携带数据
    [set makeObjectsPerformSelector:@selector(hasPrefix:) withObject:@"阳君"];

    // 当存在这个对象时,返回这个对象
    NSString *member = @"阳君";
    member = [set member:member];

    // forIn 遍历
    for (id value in set) {
        NSLog(@"%@", value);
    }

    // enum遍历
    NSEnumerator *enumerator = [set objectEnumerator];
    id value;
    while (value = [enumerator nextObject]) {
        /* code that acts on the set’s values */
        NSLog(@"%@", value);
    }

    // block 遍历
    [set enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, BOOL * _Nonnull stop) {

    }];

    // block 遍历, 并设置并发模式
    [set enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(NSString * _Nonnull obj, BOOL * _Nonnull stop) {

    }];

}

 

比较Set

- isSubsetOfSet:
- intersectsSet:
- isEqualToSet:
- valueForKey:
- setValue:forKey:

#pragma mark 比较Set
- (void)testComparingSets {

    NSSet<NSString *> *set = [NSSet setWithObjects:@"阳君", @"937447974", nil];
    NSSet<NSString *> *set2 = [NSSet setWithObjects:@"阳君", @"937447974", @"9374", nil];

    // 是否子集合
    BOOL isBool = [set isSubsetOfSet:set2];

    // 是否有交集
    isBool = [set intersectsSet:set2];

    // 是否相等
    isBool = [set isEqualToSet:set2];

}

 

排序

- sortedArrayUsingDescriptors:

#pragma mark 排序
- (void)testSorting {

    // 降序排列
    NSSet<NSString *> *set = [NSSet setWithObjects:@"1", @"3", @"2", nil];
    NSSortDescriptor *sortDes = [NSSortDescriptor sortDescriptorWithKey:nil ascending:NO];
    NSArray<NSSortDescriptor *> *sArray = [NSArray arrayWithObjects:sortDes, nil];
    NSArray<NSString *> *array = [set sortedArrayUsingDescriptors:sArray];
    NSLog(@"%@", array);

}

 


其他

参考资料

NSSet Class Reference
Collections Programming Topics

 

文档修改记录

时间描述
2015-10-21根据IOS9的NSSet的API总结

 


版权所有:http://blog.csdn.net/y550918116j

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值