天天看点

Foundation——NSSet一、NSSet概念二、NSSet的常用方法

一、NSSet概念

1. NSSet 和 NSArray 类似,都是存储元素的集合,只不过 NSArray 是顺序存储(在内存上是连续的),而 NSSet 是无序存储(在内存上是不连续的) 2. NSSet 的查找速率比 NSArray 更快 3. NSSet 的继承关系如下

二、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
           

继续阅读