NSSet型別 以及與NSArray區別
阿新 • • 發佈:2019-01-22
NSSet到底什麼型別,其實它和NSArray功能性質一樣,用於儲存物件,屬於集合; NSSet , NSMutableSet類宣告程式設計介面物件,無序的集合,在記憶體中儲存方式是不連續的,不像NSArray(是有序的集合)類宣告程式設計介面物件是有序集合,在記憶體中儲存位置是連續的;
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 | 確定集合是否包含物件 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 做交集運算 |