我有一个这样的课程:
@interface MyObject : NSObject
@property (nonatomic, strong) NSString *type;
@end
我正在创建一个这样的数组:
NSMutableArray *array = [NSMutableArray array];
MyObject *obj = [[MyObject alloc] init];
obj.type = @"test1";
[array addObject:obj];
MyObject *obj2 = [[MyObject alloc] init];
obj2.type = @"test2";
[array addObject:obj2];
MyObject *obj3 = [[MyObject alloc] init];
obj3.type = @"test1";
[array addObject:obj3];
我想过滤数组只有只有不同类型的对象,在我的例子中只是为了拥有obj1,obj2并删除obj3。
答案 0 :(得分:4)
这些方面的东西应该可以解决问题:
NSMutableSet * types = [NSMutableSet setWithCapacity:10];
NSPredicate * filterPredicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
if ([types containsObject:[evaluatedObject type]]) {
return NO;
}
else {
[types addObject:[evaluatedObject type]];
return YES
}
}];
NSArray * filteredArray = [detailedError filteredArrayUsingPredicate:filterPredicate];
上面的代码保留了每种类型的第一个对象并删除了其他对象。
答案 1 :(得分:2)
我会通过重写 hash 和 isEqual 来实现这一点:
- (BOOL) isEqual:(id)object
{
if([object isKindOfClass: [self class]])
return [_type isEqualToString: object];
return NO;
}
- (NSInteger) hash
{
return [_type hash];
}
然后从数组创建的集合中获取distinct objects数组:
NSArray* filteredArray= [NSSet setWithArray: array].allObjects;