2009-11-28 95 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