2012-05-28 3 views
2

У меня есть NSSet, который содержит четыре NSString s. Если я вызываю -containsObject:, чтобы увидеть, содержит ли NSSet определенную строку, можно ли удалить запись в NSSet, которая совпадает со строкой, которую я только что проверил?Проверка и удаление объекта в NSSet

Если мой вопрос не имеет смысла, возможно, потому, что использование NSSet может быть неправильным способом приблизиться к этому.

У меня есть четыре NSStrings и хотели бы поместить их в какую-то группу (Set, Array и т. Д.). Затем я хочу проверить, соответствует ли другой NSString любому из NSString s в группе. Если между NSString и NSString есть совпадение внутри группы, я хочу иметь возможность удалить совпадение NSString внутри группы. Возможно ли это сделать?

+0

Пожалуйста, не изменяйте значение вашего вопроса так резко после того, как вы уже получили ответы на оригинальную версию. Хорошо спросить версию «NSMutableArray» как отдельный вопрос. –

ответ

6

Допустим, ваш набор *mySet и объект, который вы хотите удалить, objectToRemove. Тогда вы можете сделать это:

NSMutableSet *mutableSet = [NSMutableSet setWithSet:mySet]; 
[mutableSet removeObject:objectToRemove]; 
mySet = mutableSet; 
+0

Я создал 'NSMutableArray' вместо' NSSet', потому что я хотел бы сохранить дубликаты. Есть ли способ использовать 'removeObject: objectToRemove', но удалить только первое вхождение в массиве? Спасибо – acidic

+0

Если вы знаете адрес объекта, вы можете использовать removeObjectIdenticalTo: method – Adam

+0

@acidic похоже, что вы хотите NSCountedSet, тогда –

1

Посмотрите на NSMutableSet и на метод removeObject:.

1

С NSSets неизменяемы, вы не можете изменить их после инициализации. Использовать NSMutableSet, у которого есть метод removeObject: для удаления объектов

1

Это не что-то из этого мира и часто цитируется программистами. Но вместо NSSet или NSArray вам нужно NSMutableSet или NSMutableArray. Поскольку только измененные коллекции могут быть изменены после их создания.

Вы удалите объект из NSMutableArray используя .. [myArray removeObject:yourObject];

Аналогично для NSMutableSet [mySet removeObject:yourObject];

1

Вы можете использовать следующий код в NSMutableArray, чтобы удалить первое вхождение объекта.

[myArray removeObjectAtIndex:[myArray indexOfObject:myObject]; 
+0

Это отлично работает, за исключением случаев, когда 'myObject' не существует в' myArray'. Как я могу реализовать проверку, чтобы убедиться, что 'myObject' является частью' myArray'? – acidic

+2

Вы можете использовать следующий код. NSUInteger myIndex = [myArray indexOfObject: myObject]; if (myIndex! = NSNotFound) {[myArray removeObjectAtIndex: myIndex]; } – Pei

Смежные вопросы