Foundation——NSSet

一、NSSet概念

1. NSSet 和 NSArray 类似,都是存储元素的集合,只不过 NSArray 是顺序存储(在内存上是连续的),而 NSSet 是无序存储(在内存上是不连续的)
2. NSSet 的查找速率比 NSArray 更快
3. NSSet 的继承关系如下
@interface NSSet<__covariant ObjectType> : NSObject <NSCopying, NSMutableCopying, NSSecureCoding, NSFastEnumeration>

二、NSSet的常用方法


1. 创建 NSSet 对象

+(instancetype)set;

+(instancetype)setWithObject:(ObjectType)anObject;

+(instancetype)setWithObjects:(ObjectType)firstObj, ...;

+(instancetype)setWithArray:(NSArray<ObjectType>*)array;

+(instancetype)setWithSet:(NSSet<ObjectType>*)set;


-(NSSet<ObjectType>*)setByAddingObject:(ObjectType)anObject;

-(NSSet<ObjectType>*)setByAddingObjectsFromArray:(NSArray<ObjectType>*)otherArray;

-(NSSet<ObjectType>*)setByAddingObjectsFromSet:(NSSet<ObjectType>*)otherSet;

    /* 
        +(instancetype)set;
        创建一个空的 NSSet 对象
     */
    NSSet * set_1 = [NSSet set];
    
    NSLog(@"set_1 is %@", set_1);
    
    /*
        + (instancetype)initWithObject:(ObjectType)anObject;
        创建并包含一个指定元素的 NSSet 对象
     */
    NSSet * set_2 = [NSSet setWithObject:@"ShangHai"];
    
    NSLog(@"set_2 is %@", set_2);   // ShangHai
    
    /*
        +(instancetype)setWithObjects:(ObjectType)firstObj, ...;
        创建并包含 指定元素列表的 NSSet 对象
     */
    NSSet * set_3 = [NSSet setWithObjects:@"ShangHai", @"BeiJing", nil];
    
    NSLog(@"set_3 is %@", set_3);   // ShangHai, BeiJing
    
    /*
        +(instancetype)setWithArray:(NSArray<ObjectType>*)array;
        创建并返回 包含指定 NSArray 对象元素的 NSSet 对象
    */
    NSSet * set_4 = [NSSet setWithArray:[NSArray arrayWithObjects:@"HuNan", @"HuBei", @"TianJin", nil]];
    
    NSLog(@"set_4 is %@", set_4);   // HuNan, HuBei, TianJin
    
    /*
        +(instancetype)setWithSet:(NSSet<ObjectType>*)set;
        创建并返回 包含指定 NSSet 对象元素的 NSSet 对象
    */
    NSSet * set_5 = [NSSet setWithSet:set_4];
    
    NSLog(@"set_5 is %@", set_5);   // HuNan, HuBei, TianJin
    
    /*
        -(NSSet<ObjectType>*)setByAddingObject:(ObjectType)anObject;
        将 set_5 对象中添加指定元素并返回一个新的 NSSet 对象
     */
    NSSet * set_6 = [set_5 setByAddingObject:@"JiangSu"];
    
    NSLog(@"set_6 is %@", set_6);   // HuNan, HuBei, TianJin, JiangSu
    
    /*
        -(NSSet<ObjectType>*)setByAddingObjectsFromArray:(NSArray<ObjectType>*)otherArray;
        将 set_6 对象中添加指定 NSSet 对象的元素,并返回一个新的 NSSet 对象
     */
    NSSet * set_7 = [set_6 setByAddingObjectsFromSet:set_3];
    
    NSLog(@"set_7 is %@", set_7);   // HuNan, HuBei, TianJin, JiangSu, ShangHai, BeiJing
    
    /*
        -(NSSet<ObjectType>*)setByAddingObjectsFromSet:(NSSet<ObjectType>*)otherSet;
        将 set_6 对象中添加指定 NSArray 对象的元素,并返回一个新的 NSSet 对象
     */
    NSSet * set_8 = [set_6 setByAddingObjectsFromArray:[NSArray arrayWithObjects:@"ZheJiang", @"FuJian", nil]];
    
    NSLog(@"set_8 is %@", set_8);   // HuNan, HuBei, TianJin, JiangSu, ZheJiang, FuJian



2. 初始化 NSSet 对象

-(instancetype)initWithArray:(NSArray<ObjectType>*)array;

-(instancetype)initWithObjects:(ObjectType)firstObj, ...;

-(instancetype)initWithSet:(NSSet<ObjectType>*)set;

-(instancetype)initWithSet:(NSSet<ObjectType>*)set copyItems:(BOOL)flag;


/*
        -(instancetype)initWithArray:(NSArray<ObjectType>*)array;
        用指定的 NSArray 对象中的元素初始化 NSSet 对象
     */
    NSSet * set_1 = [[NSSet alloc] initWithArray:[NSArray arrayWithObjects:@"XiZang", @"XinJiang", nil]];
    
    NSLog(@"set_1 is %@", set_1);   // XiZang, XinJiang
    
    /*
        -(instancetype)initWithObjects:(ObjectType)firstObj, ...;
        用指定对象列表初始化 NSSet 对象
     */
    NSSet * set_2 = [[NSSet alloc] initWithObjects:@"GuangDong", @"ShanDong", nil];
    
    NSLog(@"set_2 is %@", set_2);   // GuangDong, ShanDong
    
    /*
        -(instancetype)initWithSet:(NSSet<ObjectType>*)set;
        用指定 NSSet 对象中的元素初始化 NSSet 对象
     */
    NSSet * set_3 = [[NSSet alloc] initWithSet:set_2];
    
    NSLog(@"set_3 is %@", set_3);   // GuangDong, ShanDong
    
    /*
        -(instancetype)initWithSet:(NSSet<ObjectType>*)set copyItems:(BOOL)flag;
        用指定 NSSet 对象中的元素初始化 NSSet 对象,并对每一个对象进行深拷贝
     */
    NSSet * set_4 = [[NSSet alloc] initWithSet:set_3 copyItems:YES];
    
    NSLog(@"set_4 is %@", set_4);   // GuangDong, ShanDong






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值