Use NSMutableSet
:
NSMutableSet *intersection = [NSMutableSet setWithArray:array1];
[intersection intersectSet:[NSSet setWithArray:array2]];
[intersection intersectSet:[NSSet setWithArray:array3]];
NSArray *array4 = [intersection allObjects];
The only issue with this is that you lose ordering of elements, but I think (in this case) that that’s OK.
As has been pointed out in the comments (thanks, Q80!), iOS 5 and OS X 10.7 added a new class called NSOrderedSet
(with a Mutable
subclass) that allows you to perform these same intersection operations while still maintaining order.