天天看點

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
           

繼續閱讀