0

ここで見つかった単一の基本オブジェクトである場合、NSArray から NSArray を減算することを知っています

しかし、私が持っているのはこのようなオブジェクトです

@interface Set : NSObject
@property (nonatomic, strong) NSString *ItemId;
@property (nonatomic, strong) NSString *time;
@property (nonatomic, strong) NSString *Category_id;
@property (nonatomic, strong) NSString *List_id;
@property (nonatomic, strong) NSString *name;
@end

セットオブジェクトを持つ配列を、同じオブジェクトを持つ別の配列から削除するにはどうすればよいですか? それは私が知っている反復によって行うことができます。他の方法はありますか?

編集:明確にするために

配列 Aには 5 つのセット オブジェクトがあり、配列 B には 4 つのセット オブジェクトがあります 。配列 A と配列 B には、共通の値を持つ 3 つのセット オブジェクトが含まれています

必要なのは、結果の配列 C に 2 つのオブジェクトを持つArray C =Array A - Array Bだけです

ありがとうございました :)

4

2 に答える 2

3

- (NSUInteger)hashand- (BOOL)isEqual:(id)objectメソッドをSetクラスに実装する必要があります。

例:-

- (NSUInteger)hash {
   return [self.ItemId hash];
}

- (BOOL)isEqual:(id)object
{
    return ([object isKindOfClass:[self class]] &&
            [[object ItemId] isEqual:_ItemId])

}

その後、これを試してください:

NSMutableSet *set1 = [NSMutableSet setWithArray:array1];
NSMutableSet *set2 = [NSMutableSet setWithArray:array2];
[set1 intersectSet:set2]; //this will give you only the obejcts that are in both sets

NSArray *commonItems = [set1 allObjects];

[mutableArray1 removeObjectsInArray:commonItems];//mutableArray1 is the mutable copy of array1

mutableArray1共通オブジェクトを削除した後、すべてのオブジェクトが以前と同じ順序になります。

于 2013-02-21T06:50:38.953 に答える
1

NSSetを使用NSPredicateすることで、お客様の要件を満たすことができます。

Assessors *ass1 = [[Assessors alloc] init];
ass1.AssessorID = @"3";

Assessors *ass2 = [[Assessors alloc] init];
ass2.AssessorID = @"2";

Assessors *ass3 = [[Assessors alloc] init];
ass3.AssessorID = @"1";

Assessors *ass4 = [[Assessors alloc] init];
ass4.AssessorID = @"2";

NSSet *nsset1 = [NSSet setWithObjects:ass1, ass2,  nil];
NSSet *nsset2 = [NSSet setWithObjects:ass3, ass4, nil];

// retrieve the IDs of the objects in nsset2
NSSet *nsset2_ids = [nsset2 valueForKey:@"AssessorID"];

// only keep the objects of nsset1 whose 'id' are not in nsset2_ids
NSSet *nsset1_minus_nsset2 = [nsset1 filteredSetUsingPredicate:[NSPredicate predicateWithFormat:@"NOT AssessorID IN %@",nsset2_ids]];

for(Assessors *a in nsset1_minus_nsset2)
    NSLog(@"Unique ID : %@",a.AssessorID);

ここで、評価者は私の NSObject クラス (あなたの場合は設定) であり、評価者 ID はそのクラスの 1 つのプロパティです。

これが役立つことを願っています。

于 2013-02-21T07:27:07.577 に答える