NSSet 核心特性
- 無序、不重複的物件集合;
- 查找效率極高(哈希表實現),適合頻繁判斷「是否包含」;
- 不可變,對應可變子類
NSMutableSet。
常用建構方法
// 不可變
NSSet *set1 = [NSSet set]; // 空集合
NSSet *set2 = [NSSet setWithObject:@"abc"]; // 單元素
NSSet *set3 = [NSSet setWithObjects:obj1, obj2, @"str", nil]; // 多元素
// 可變
NSMutableSet *mset = [NSMutableSet set];
[mset addObject:obj];
[mset addObjectsFromArray:@[@"a", @"b"]];
[mset removeObject:@"a"];
[mset removeAllObjects];
核心操作
| 操作 | 方法 | 說明 |
| 元素個數 | count | 返回 NSUInteger |
| 任意取一元素 | anyObject | 無序,僅供檢查 |
| 包含判斷 | containsObject: / member: | 返回 BOOL |
| 轉陣列 | allObjects | 返回 NSArray(順序不定) |
| 快速遍歷 | for (id obj in set) | 不保證順序 |
| 集合運算 | unionSet:, intersectSet:, isEqualToSet:, intersectsSet: | 並集、交集、相等、是否有交集 |
NSMutableSet 進階用法
NSMutableSet *setA = [NSMutableSet setWithObjects:@"a", @"b", @"c", nil];
NSMutableSet *setB = [NSMutableSet setWithObjects:@"c", @"d", @"e", nil];
[setA unionSet:setB]; // setA 變為 {a,b,c,d,e}
[setA intersectSet:setB]; // setA 變為 {c}
BOOL equal = [setA isEqualToSet:setB];
BOOL hasCommon = [setA intersectsSet:setB];
效能提示
- 大量資料去重、成員檢查首選 NSSet(O(1) 平均查找);
- 需保持順序或允許重複時改用 NSArray;
- 自訂物件放入 Set 必須正確實作
isEqual: 與 hash。