数组传递测试的对象数组

时间:2011-04-02 22:43:00

标签: iphone objective-c ipad nsarray nspredicate

我有一个NSArray对象,它们具有属性id

然后我有另一个带有选择ID的NSArray。

我需要获取第一个数组中所有在第二个数组中列出id的对象。

是否可以在没有for循环的情况下执行此操作(对于循环来说好1,但我想避免它)。我知道如何用2 for循环来做这个,但这看起来非常低效。所以基本上我正在寻找最有效的方式。

(Id是一个NSURL顺便说一句,所以它不能是任何整数特定的)

2 个答案:

答案 0 :(得分:5)

没有循环!

NSArray *arrayOfIdentifiers = ...;
NSArray *arrayOfObjects = ...;
NSPredicate *filter = [NSPredicate predicateWithFormat:@"id IN %@", arrayOfIdentifier];
NSArray *filteredObjects = [arrayOfObjects filteredArrayUsingPredicate:filter];

好吧,没有你写的循环。 filteredArrayUsingPredicate:内可能存在循环。

答案 1 :(得分:2)

你需要一组交集。

NSMutableSet *set1=[[[NSMutableSet alloc] initWithArray:array1] autorelease];
NSMutableSet *set2=[[NSMutableSet alloc] initWithArray:array2];
[set1 intersectSet:set2];
[set2 release];
NSArray *newArray=[set1 allObjects];