2009-11-28 57 views
18

这感觉像这样一个愚蠢的问题,但我怎么能找到一个字符串在NSArray如何在NSArray中查找字符串?

我尝试使用

[array indexOfObjectIdenticalTo:myString] 

但需要刺痛具有相同的地址。

有没有人有关于如何做到这一点的任何提示?

回答

13

彼得的回答是正确的。

一个额外的说明;如果阵列中有大量字符串,则-indexOfObject:将执行线性搜索。这可能被证明是您应该考虑使用不同容器的性能瓶颈;一个NSSet或NSDictionary,可能(取决于字符串的含义)。

另一个问题是如果字符串都相对相似和/或相对较长。

当然,除非您使用分析工具来证明您遇到性能问题,否则不要打扰优化任何内容。

4

您可以使用NSOrderSet作为容器,在NSOrderedSet类参考过的观点是如下:

NSOrderedSet和它的子类,NSMutableOrderedSet,编程接口声明的对象的有序集合。

NSOrderedSet声明不同对象的静态集合的编程接口。您>在创建静态集时创建静态集,然后无法修改条目。另一方面,NSMutableOrderedSet为>动态集合的不同对象声明一个编程接口。动态或可变集允许随时添加和删除条目,根据需要自动分配内存。

当元素的顺序很重要时,您可以使用有序集合作为数组的替代方法>并且在测试集合中是否包含对象时的性能是一个考虑因素 - >测试数组的成员资格比测试一组的成员资格。

访问http://developer.apple.com/library/mac/#documentation/Foundation/Reference/NSOrderedSet_Class/Reference/Reference.html

1

containsObject:

返回一个布尔值,指示一个给定的对象是否存在在数组中。

  • (BOOL)containsObject:(ID)anObject 参数 anObject 的对象。

返回值 YES如果anObject数组中存在的,否则NO。

讨论

该方法确定是否anObject是通过发送的isEqual阵列中存在:消息发送到每个阵列的对象(和传递anObject作为参数给每个isEqual:方法消息)。

宣布

NSArray.h