2012-05-28 60 views
2

我有一个NSSet,其中包含四个NSString s。如果我打电话-containsObject:以查看NSSet是否包含某个字符串,是否可以删除NSSet中与我刚刚检查的字符串相同的条目?检查并删除NSSet中的对象

如果我的问题没有意义,可能是因为使用NSSet可能是解决此问题的错误方法。

我有四个NSStrings,并希望将它们放在某种组(Set,Array等)中。然后我想检查另一个NSString是否与该组中的任何NSString相匹配。如果组内的NSStringNSString匹配,我希望能够删除组内的NSString匹配。这可能吗?

+0

请不要在你已经收到原始版本的答案后,如此激烈地改变你的问题的含义。把'NSMutableArray'版本作为一个单独的问题是很好的。 –

回答

6

比方说,你集*mySet,你要删除的对象是objectToRemove。然后,你可以这样做:

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

我已经创建了一个'NSMutableArray'而不是'NSSet',因为我想保留重复项。有没有办法使用'removeObject:objectToRemove',但只能删除数组中的第一个匹配项?谢谢 – acidic

+0

如果你知道你可以使用的对象的地址removeObjectIdenticalTo:方法 – Adam

+0

@acidic它听起来像你想要一个NSCountedSet然后 –

1

看看NSMutableSetremoveObject:方法。

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