如何在NSArray中查找字符串?

时间:2009-11-28 17:51:36

标签: cocoa nsstring nsarray

这感觉就像是一个愚蠢的问题,但我怎样才能找到NSArray中的字符串?

我尝试使用

[array indexOfObjectIdenticalTo:myString]

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

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

4 个答案:

答案 0 :(得分:50)

您希望the indexOfObject: method通过向数组中的每个对象发送isEqual:消息来查找对象。

答案 1 :(得分:13)

彼得的回答是正确的。

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

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

当然,在使用分析工具来证明您遇到性能问题之前,不要费心优化任何事情。

答案 2 :(得分:4)

您可以使用NSOrderSet作为容器,NSOrderedSet类参考中的over视图如下:

  

NSOrderedSet及其子类NSMutableOrderedSet将编程接口声明为有序的对象集合。

     

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

     

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

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

答案 3 :(得分:1)

<强> containsObject:

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

  • (BOOL)containsObject:(ID)anObject 参数 一个东西 一个对象。

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

<强>讨论

此方法通过向每个数组的对象发送isEqual:消息(并将anObject作为参数传递给每个isEqual:消息)来确定数组中是否存在anObject。

声明

NSArray.h