Почему бы не создать NSSet (на самом деле NSMutableSet), сбросить в него содержимое всех 5 массивов и затем создать новый массив NSArray из NSSet?
Извините, я неправильно прочитал ваш вопрос. Да, я думаю, что вам нужно пройтись по каждой из них, чтобы найти дубликаты. Но это не так страшно для реализации (может быть несколько медленным во время выполнения, если ваши массивы огромны).
Вот пример кода:
- (void) filterSet: (NSMutableSet*)set withArray: (NSArray*) array {
NSMutableSet* removals = [NSMutableSet setWithCapacity:[array count]];
for (id obj in set) {
if (! [array containsObject: obj]) {
[removals addObject: obj];
}
}
[set minusSet: removals];
}
NSMutableSet* mySet = [NSMutableSet setWithCapacity:[array1 count] * 5];
[mySet addObjectsFromArray: array1];
[self filterSet: mySet withArray: array2];
[self filterSet: mySet withArray: array3];
[self filterSet: mySet withArray: array4];
[self filterSet: mySet withArray: array5];
NSArray* filteredArray = [mySet allObjects];