def callmethod(cls, mtd_name):
method = getattr(cls, mtd_name)
method()
Ваш подход NSSet
является лучшим, если вас не беспокоит порядок объектов, но опять же, если вас не беспокоит порядок, тогда почему вы для начала не храните их в NSSet
?
Я написал ответ ниже в 2009 году; в 2011 году Apple добавила NSOrderedSet
в iOS 5 и Mac OS X 10.7. То, что раньше было алгоритмом, теперь представляет собой две строки кода:
NSOrderedSet *orderedSet = [NSOrderedSet orderedSetWithArray:yourArray];
NSArray *arrayWithoutDuplicates = [orderedSet array];
Если вас беспокоит порядок и вы работаете на iOS 4 или более ранней версии, переберите копию массива:
NSArray *copy = [mutableArray copy];
NSInteger index = [copy count] - 1;
for (id object in [copy reverseObjectEnumerator]) {
if ([mutableArray indexOfObject:object inRange:NSMakeRange(0, index)] != NSNotFound) {
[mutableArray removeObjectAtIndex:index];
}
index--;
}
[copy release];