将对象添加到Mutable数组

时间:2011-09-14 15:35:46

标签: iphone objective-c ios ios4

我想从字典中添加项目到可变数组。问题是我想在添加新项目之前检查现有的数组项目。如果数组中已存在相同的项目,我想替换它。否则添加新项目。 我怎么能这样做?

3 个答案:

答案 0 :(得分:2)

您可以使用NSMutableSet而不是NSMutableArray。 NSMutableSet上的addObject方法只会“将一个给定的对象添加到集合中,如果它还不是成员的话。”

如果您想在添加到论坛之前检查会员资格,可以查看以下结果:

[mySet containsObject:myObjectFromDictionary]

...返回一个简单的BOOL值,指示该集合是否已经包含一个对象,当您的对象传递给它时,isEqual方法返回true。

(对于一些额外的功能,NSCountedSet将跟踪添加到isEqual:返回true的“集合”的对象数量。

答案 1 :(得分:1)

您可以将[yourArray indexOfObject:yourObject];的结果与NSNotFound进行比较,以了解对象是否在数组中。
它将为您提供要替换的对象的索引,或者如果它等于NSNotFound,您将添加它。
使用isEqual:方法测试对象相等性 NSArray class reference

答案 2 :(得分:1)

从表面上看,文森特和里奇的答案都是正确的。

但是,原始问题中存在一个尚未解决的概念性问题。

即,通过indexOfObject:(或集合中的containsObject:)的“数组成员资格”最终是通过使用isEqual:比较两个对象来完成的。

如果isEqual:返回YES,那么这两个对象在代码中的功能完全相同,或者在设计和实现方面存在其他明显更严重的问题。

因此,真正的问题应该<“如何检测对象是否已经存在于数组中并且不添加它?”而Rich和Vincent的回答都是正确的。

即。你应该只需要检查是否存在,如果存在,不采取任何行动。

(请注意,存在一些深奥的情况,其中实际上需要替换,但它们都是真正深奥的,并且通常不会在可变集合的上下文中使用)