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

时间:2022-09-07 19:52:39

 一:NSSet 集合:                                                                                                                                                         

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

      NSSetNSArray区别是:在搜索一个一个元素时,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);
}