天天看點

NSSet類型 以及與NSArray差別

         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,NSArray都是類,隻能添加cocoa對象,如果需要加入基本資料類型(int,float,BOOL,double等),需要将資料封裝成NSNumber類型。

NSSet 常用方法總結

+(id)setWithObjects:obj1,obj2,...nil

使用一組對象建立新的集合

-(id)initWithObjects:obj1,obj2,....nil

使用一組對象初始化新配置設定的集合

-(NSUInteger)count

傳回集合成員個數

-(BOOL)containsObject:obj

确定集合是否包含對象 obj

-(BOOL)member:obj

-(NSEnumerator*)objectEnumerator

傳回集合中所有對象到一個 NSEnumerator 類型的對象

-(BOOL)isSubsetOfSet:nsset

判斷集合是否是NSSet的子集

-(BOOL)intersectsSet:nsset

判斷兩個集合的交集是否至少存在一個元素

-(BOOL)isEqualToSet:nsset

判斷兩個集合是否相等

NSMutableSet 常用方法總結

-(id)setWithCapcity:size

建立一個有size大小的新集合

-(id)initWithCapcity:size

初始化一個新配置設定的集合,大小為size

-(void)addObject:obj

添加對象 obj 到集合中

-(void)removeobject:obj

從集合中删除對象 obj

-(void)removeAllObjects

删除集合中所有對象

-(void)unionSet:nsset

将nsset的所有元素添加到集合

-(void)minusSet:nsset

從集合中去掉所有的NSSet 的元素

-(void)interectSet:nsset

集合和NSSet 做交集運算

  本文轉自新風作浪 51CTO部落格,原文連結:http://blog.51cto.com/duxinfeng/1208769,如需轉載請自行聯系原作者

繼續閱讀