#import <Foundation/Foundation.h>
//使用Printing类别,将打印方法添加到NSSet
@interface NSSet (Printing)
- (void) print;
@end
@implementation NSSet (Printing)
- (void) print{
printf("{ ");
for(NSNumber *element in self)
printf(" %li", (long) [element integerValue]);
printf("} \n");//提醒我们如何通过创建分类将方法添加到类中
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSMutableSet *set1 = [NSMutableSet setWithObjects: @1, @2, @5, @10, nil];
NSSet *set2 = [NSSet setWithObjects:@-5, @100, @3, @5, nil];
NSSet *set3 = [NSSet setWithObjects:@12, @200, @3, nil];//以一个nil结尾的对象数组创建新集合
NSLog(@"set1 = ");
[set1 print];
NSLog(@"set2: ");
[set2 print];
//相等性测试
if([set1 isEqualToSet: set2] == YES)//检测两个集合是否相等
NSLog(@"set1 equals set2");
else
NSLog(@"set1 is not equal to set2");
//成员测试
if([set1 containsObject: @10] == YES)//查询10是否在set1中
NSLog(@"set1 contains 10");
else
NSLog(@"set1 does not contain 10");
if([set2 containsObject: @10] == YES)
NSLog(@"set2 contains 10");
else
NSLog(@"set2 does not contain 10");
//在可变集合set1中添加移除对象
[set1 addObject: @4];
[set1 removeObject: @10];
NSLog(@"set1 after adding 4 and removing 10:");
[set1 print];
//获得两个集合的交集
[set1 intersectSet: set2];
NSLog(@"set1 intersect set2: ");
[set1 print];
//两个集合的并集
[set1 unionSet: set3];
NSLog(@"set1 union set3: ");
[set1 print];
//在这两种情况下,运算结果取代了消息的接收者(set1)改变
}
return 0;
}Foundation框架同样提供了一个名为NSCountedSet的类。这种集合同一对象可以出现多次,然而并非在集合中存放多次这个对象,而是维护一个次数计数。当第一次将对象添加到集合时,对象的count值被置为1,然后每次将这个对象添加到集合中,count值就会增1,每次从集合删除对象,count值就会减1.当对象的count值为0时,实际上对象本身就被删除了。使用方法countForObject:可以在集合中检索某个对象count值。重要应用是单词计数器。
本文介绍如何在Objective-C中通过分类为NSSet添加自定义方法,并演示NSSet的基本操作,包括创建、添加、删除元素及求交集、并集等。同时,通过实例展示了NSSet与NSMutableSet的区别。
214

被折叠的 条评论
为什么被折叠?



