Массив объектов из массива, проходящего тестирование - PullRequest
2 голосов
/ 03 апреля 2011

У меня есть NSArray объектов, у которых есть свойство id.

У меня есть еще один NSArray с выбором идентификаторов.

Мне нужно получить все объекты впервый массив с идентификаторами, перечисленными во втором массиве.

Возможно ли сделать это без циклов for (хорошо, 1 for loop - это нормально, но я бы хотел этого избежать).Я знаю, как сделать это с 2 для циклов, но это кажется очень неэффективным.Так что в основном я ищу наиболее эффективный способ.

(Идентификатор - это, между прочим, NSURL, поэтому он не может быть целочисленным)

Ответы [ 2 ]

5 голосов
/ 03 апреля 2011

Без петель!

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

Ну, нет петель, которые ты пишешь. Вероятно, внутри filteredArrayUsingPredicate:.

есть петли
2 голосов
/ 03 апреля 2011

Вам нужно пересечение ос наборов.

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