Добавить объект в массив, только если объект еще не в нем

Я хочу добавить объект в массив, только если массив уже не содержит этого объекта. Как сделать наоборот метода containsObject в NSArray?


person OhDoh    schedule 02.03.2012    source источник
comment
Использование оператора not? (что, я думаю, !, как и во всех языках C-типа)   -  person JB Nizet    schedule 02.03.2012


Ответы (3)


Используйте NSMutableOrderedSet< /a>, чей addObject: делает именно то, что вы хотите:

Добавляет заданный объект в изменяемый упорядоченный набор, если он еще не является членом.

person Community    schedule 02.03.2012
comment
Абсолютно верно. Набор — это массив плюс уникальность, и это именно то, о чем он просит. - person matt; 02.03.2012
comment
@matt: набор упорядоченный представляет собой массив плюс уникальный; наборы обычно не сохраняют порядок. - person jscs; 03.03.2012
comment
Обратите внимание, что NSMutableOrderedSet был представлен только в iOS5, для более ранних платформ вам придется использовать NSMutableSet (это нормально, если вы не заботитесь о сохранении порядка вставки объектов). - person Kendall Helmstetter Gelner; 03.03.2012

Вот как бы я это сделал:

if (![myArray containsObject:objectToAdd]){
[myArray addObject:objectToAdd];
}

Подробнее здесь:

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/NSArray.html

Обратите внимание, что поскольку метод containsObject запрашивает каждый объект в массиве, при его использовании на больших массивах возникают некоторые проблемы с производительностью.

person crgt    schedule 03.03.2012

если ваш объект имеет тип NSString*, вы можете выполнить быстрое перечисление, подобное этому

BOOL found = NO;

for(NSString *object in YourArray)
{
 if([object isEqualtoString:@"My text"])
 {
 found = YES;
 }
}
if(!found)
{
//addObject
}

в target-c есть много методов isEqual для разных типов данных

person Shubhank    schedule 02.03.2012