Iphone 向可变数组添加对象

Iphone 向可变数组添加对象,iphone,objective-c,ios,ios4,Iphone,Objective C,Ios,Ios4,我想从字典中将项添加到可变数组中。问题是我想在添加新项之前检查现有的数组项。如果数组中已经存在相同的项,我想替换它。否则,请添加新项目。 我怎么做呢 您可以比较以下结果:[yourArray indexOfObject:yourObject]对照NSNotFound以了解对象是否在数组中。 它将为您提供要替换的对象的索引,或者如果它等于NSNotFound,您将添加它。 使用isEqual:方法测试对象的平等性。 .您可以比较以下结果:[yourArray indexOfObject:yourO

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

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

.

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

您也许可以使用NSMutableArray,而不是NSMutableArray。NSMutableSet上的
addObject
方法将仅“将给定对象添加到集合中,如果该对象尚未成为成员。”

如果要在添加到集合之前检查成员资格,可以检查以下结果:

[mySet containsObject:MyObject FromDictionary]

…它返回一个简单的布尔值,该值指示集合是否已包含一个对象,该对象的
isEqual
方法在将对象传递给它时返回true

(为了获得一点额外的功能,将跟踪添加到“集合”中的对象的数量,
isEqual:
返回true)

您可能可以使用一个而不是NSMutableArray。NSMutableSet上的
addObject
方法将仅“将给定对象添加到集合中,如果该对象尚未成为成员。”

如果要在添加到集合之前检查成员资格,可以检查以下结果:

[mySet containsObject:MyObject FromDictionary]

…它返回一个简单的布尔值,该值指示集合是否已包含一个对象,该对象的
isEqual
方法在将对象传递给它时返回true


(为了获得一点额外的功能,我们将跟踪添加到“集合”中的对象数量,
isEqual:
返回true)

从表面上看,Vincent和Rich的答案都是正确的

然而,在最初的问题中有一个概念问题尚未解决

也就是说,通过
indexOfObject:
(或
containsObject:
在集合中)的“数组成员身份”最终是通过使用
isEqual:
比较两个对象来完成的

如果
isEqual:
返回YES,那么最好让这两个对象在代码中的功能完全相同,否则在设计和实现中会出现其他更严重的问题

因此,真正的问题应该是“如何检测一个对象是否已经在数组中,而不是添加它?”Rich和Vincent的答案仍然正确

即,您只需检查是否存在,如果存在,则不采取任何行动


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

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

然而,在最初的问题中有一个概念问题尚未解决

也就是说,通过
indexOfObject:
(或
containsObject:
在集合中)的“数组成员身份”最终是通过使用
isEqual:
比较两个对象来完成的

如果
isEqual:
返回YES,那么最好让这两个对象在代码中的功能完全相同,否则在设计和实现中会出现其他更严重的问题

因此,真正的问题应该是“如何检测一个对象是否已经在数组中,而不是添加它?”Rich和Vincent的答案仍然正确

即,您只需检查是否存在,如果存在,则不采取任何行动


(请注意,在某些深奥的情况下,替换实际上是有保证的,但它们都是真正深奥的,并且通常不在可变集合的上下文中使用)

如果新对象不需要替换旧项,这将起作用;NStutabLeSET在数组中给出了原始对象优先级,而听起来好像OP希望新对象具有优先权——但是对于OP来说,考虑是否替换旧的是必要的。如果新对象和原始对象响应代码<是< /COD> > <代码> Is:事实上,不相等,那么OP的问题远比这个问题严重得多……如果新对象不需要替换旧项目,这将起作用;NStutabLeSET在数组中给出了原始对象优先级,而听起来好像OP希望新对象具有优先权——但是对于OP来说,考虑是否替换旧的是必要的。如果新对象和原始对象响应代码<是< /COD> > <代码> Is:事实上,不平等,那么OP有远,远,比这个问题更严重的问题…同意。很多功能都依赖于
isEqual
的正确实现。关于这件事有一个很棒的帖子。(另外,简单地说,NSArray还支持
containsObject
方法,与NSSet一样,该方法返回BOOL。)同意。很多功能都依赖于
isEqual
的正确实现。关于这件事有一个很棒的帖子。(另外,简单地说,NSArray还支持
containsObject
方法,与NSSet一样,该方法返回BOOL。)