使用NSSet / NSMutableSet过滤对象?

时间:2010-10-19 04:09:19

标签: objective-c

我已经通过使用NSSet / NSMutableSet看到了有关过滤器对象的一些问题/答案。这些案例使用简单类型的对象,例如NSStringint。以下是用于过滤NSString个对象的代码示例:

NSSet smallArray = [[NSSet alloc] initWithObjects:@"0", @"1", @"2", nil];
NSArray bigArray = [[NSArray alloc] initWithObjects:@"0", @"1", @"4", @"5", ..., nil];
NSMutableSet *intersection = [NSMutableSet setWithArray:smallArray];
[intersection intersectSet:[NSSet setWithArray:bigArray];
NSArray *result = [NSArray arrayWithSet:intersection];

如果set或array中的对象是Object-C类实例,我不确定它是如何工作的。以下面的课程为例:

@interface MyObject: NSObject {
   int id;
   NSString *name;
   NSString *city;
   ...
}

我不确定set的intersetSet如何与上面的类型对象一起使用。如果我想通过仅比较id得到MyObject对象和bigArray的交叉集合,我怀疑我是否可以使用intersetSet:选择器方法?如果没有,不确定是否应该向MyObject类添加任何方法,以便set知道如何比较对象?

1 个答案:

答案 0 :(得分:4)

您需要在MyObject上实现isEqual:(以及hash),这样如果两个对象“匹配”,则返回YES。然后设置的交叉点代码应该自动工作。

Here's来自文档的快速而脏的样本。另请查看this SO question