1

私はこのようなクラスを持っています:

@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を削除するために、配列をフィルタリングして、異なるタイプのオブジェクトのみを持ちたいと思います。

4

2 に答える 2

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];

上記のコードは、各タイプの最初のオブジェクトを保持し、他のオブジェクトを削除します。

于 2013-07-04T14:19:52.323 に答える
2

hashisEqualをオーバーライドするだけでこれを行います。

- (BOOL) isEqual:(id)object
{
    if([object isKindOfClass: [self class]])
        return [_type isEqualToString: object];
    return NO;
}

- (NSInteger) hash
{
    return [_type hash];
}

次に、配列から作成されたセットから個別のオブジェクト配列を取得します。

NSArray* filteredArray= [NSSet setWithArray: array].allObjects;
于 2013-07-04T14:28:14.097 に答える