天天看点

OC语法<4.4> Foundation框架中的集合类-NSSet

 一:NSSet 集合:                                                                                                                                                         

      NSSet到底什么类型,其实他和NSArray功能性质一样,用于存储对象,属于集合,NSSet,NSMutableSet类声明编程接口对象,是无序的集合,在内存中存储方式是不连续的,不像NSArray,NSDictionary(都是有序集合)类声明编程接口对象是有序集合,在内存中存储位置是连续的;

      NSSet和NSArray区别是:在搜索一个一个元素时,NSSet效率会比NSArray高,主要是它用奥了一个算法hash;比如你要存储 元素A,一个hash算法能直接找到A存储的位置,同样,当你要访问A时,一个hash过程就能找到A存储的位置,而对于NSArray若想知道A到底在不在数组中,则需要遍历整个数组,显然效率低了。

 注意:重点!!!NSSet在实际的开发当中的最常用用法:

 NSSet中不能够存储重复数据,可以用它来去除重复的值,(就是说重复的值无论你存多少他只能显示一个)

本小节知识点:

1:向set中添加元素

2:求元素个数

3:判断集合中是否存在某个对象

4:遍历集合

详细内容见下面代码:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //NSSet 是无序的,是个不可变集合
        //1:向字典中添加元素
        NSSet *set = [[NSSet alloc]initWithObjects:@"one",@"two",@"three", nil];
        NSLog(@"set = %@",set);
        
        //2:Set元素个数
        NSLog(@"set 的元素个数:%zi",set.count);
        
        //3:判断集合中是否存在某个对象(跟数组是一样的)
        BOOL isContains = [set containsObject:@"one"];
        NSLog(@"存在吗?:%@",isContains?@"YES":@"NO");
        
        //4:set集合的遍历
        NSEnumerator *enumerato = [set objectEnumerator];
        NSString *value;
        while (value = [enumerato nextObject]) {
            NSLog(@"value = %@",value);
        }
           

第二:NSMutableSet 可变集合                                                                                                                                  

详细内容直接上代码:

//NSMutableSet 可变集合
        //1:创建字典
        NSMutableSet *muSet = [[NSMutableSet alloc]init];
        
        //2:存值
        [muSet addObject:@"hello"];
        [muSet addObject:@"every"];
        [muSet addObject:@"one"];
        NSLog(@"muSet = %@",muSet);
        
        //3:删除
        [muSet removeObject:@"hello"];
        
        //4:删除所有
        //[muSet removeAllObjects];
        
        //5:遍历
        NSEnumerator *emumerator2 = [muSet objectEnumerator];
        NSString *value2;
        while (value2 = [emumerator2 nextObject]) {
            NSLog(@"value = %@",value2);
        }