3

私は2つのプロパティを持つNSObjectを持っています

@interface Entity : NSObject  {

     NSNumber *nid;
     NSString *title;
}

エンティティのオブジェクトを含む 2 つの配列があり、nid でこれら 2 つを述語と比較したい

array1: ({nid=1,title="test"},{nid=2,title="test2"})
array2: ({nid=2,title="test2"},{nid=3,title="test3"})

2つの配列には両方とも値2のnidがあるため、出力は

array3: ({nid=2,title="test2"})

したがって、一致する nid のみを持つ配列を生成できます

4

1 に答える 1

4

次のコードは私にとってはうまくいくようです(明らかに MyEntity オブジェクトをリークしますが、それはサンプルのターゲットではありませんでした):

NSArray* array1 = [NSArray arrayWithObjects:[[MyEntity alloc] initWithID:[NSNumber numberWithInt:1] title:@"1"], 
                   [[MyEntity alloc] initWithID:[NSNumber numberWithInt:2] title:@"2"], nil];

NSArray* array2 = [NSArray arrayWithObjects:[[MyEntity alloc] initWithID:[NSNumber numberWithInt:2] title:@"2"], 
                   [[MyEntity alloc] initWithID:[NSNumber numberWithInt:3] title:@"3"], nil];

NSArray* idsArray = [array1 valueForKey:@"nid"];
NSArray* filteredArray = [array2 filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"nid IN %@", idsArray]];

filteredArrayID が両方の配列に存在するエンティティが含まれます。

于 2010-05-20T12:01:51.147 に答える