NSSet 使用如下:
#import "MS_NSSet.h"
@implementation MS_NSSet
@synthesize _nsSet;
-(void)showNSSet
{
/*
NSSet到底什么类型,其实它和NSArray功能性质一样,用于存储对象,属于集合; NSSet , NSMutableSet类声明编程接口对象,无序的集合,在内存中存储方式是不连续的,不像NSArray,NSDictionary(都是有序的集合)类声明编程接口对象是有序集合,在内存中存储位置是连续的;
NSSet和我们常用NSArry区别是:在搜索一个一个元素时NSSet比NSArray效率高,主要是它用到了一个算法hash(散列,也可直译为哈希);开发文档中这样解释:You can use sets as an alternative to arrays when the order of elements isn’t important and performance in testing whether an object is contained in the set is a consideration—while arrays are ordered, testing for membership is slower than with sets.
比如你要存储元素A,一个hash算法直接就能直接找到A应该存储的位置;同样,当你要访问A时,一个hash过程就能找到A存储的位置。而对于NSArray,若想知道A到底在不在数组中,则需要便利整个数组,显然效率较低了;
*/
_nsSet = [[NSSet alloc] initWithObjects:@"A",@"B",@"C",@"D", nil];
//判断NSSet中是否有此元素存在
id item = [_nsSet member:@"N"];
NSLog(@"NSSet member:%@",item);
NSEnumerator *enumberator = [_nsSet objectEnumerator];
NSObject *enumberItem;
while((enumberItem = enumberator.nextObject) != nil)
{
NSLog(@"Enumber Item:%@",enumberItem);
}
//通过测试,NSSet 的 anyObject 返回set中的第一个元素,而不是随机一个元素
for(int i=0;i<8;i++)
{
id anyItem = [_nsSet anyObject];
NSLog(@"NSSet any object :%@",anyItem);
}
BOOL contains = [_nsSet containsObject:@"I"];
NSLog(@"NSSet Contains :%i",contains);
}
@end