我有一个NSArray对象,它们具有属性id
。
然后我有另一个带有选择ID的NSArray。
我需要获取第一个数组中所有在第二个数组中列出id的对象。
是否可以在没有for循环的情况下执行此操作(对于循环来说好1,但我想避免它)。我知道如何用2 for循环来做这个,但这看起来非常低效。所以基本上我正在寻找最有效的方式。
(Id是一个NSURL顺便说一句,所以它不能是任何整数特定的)
答案 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];