将2个数组与NSPredicate(可可)进行比较

时间:2010-05-20 11:37:53

标签: iphone objective-c cocoa nspredicate

我有一个带有2个属性的NSObject

@interface Entity : NSObject  {

     NSNumber *nid;
     NSString *title;
}

我有两个包含Entity对象的数组,我想在nid上用谓词比较这两个

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的

的数组

1 个答案:

答案 0 :(得分: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]];

filteredArray包含两个数组中都存在id的实体。