這感覺像這樣一個愚蠢的問題,但我怎麼能找到一個字符串在NSArray
?如何在NSArray中查找字符串?
我嘗試使用
[array indexOfObjectIdenticalTo:myString]
但需要刺痛具有相同的地址。
有沒有人有關於如何做到這一點的任何提示?
這感覺像這樣一個愚蠢的問題,但我怎麼能找到一個字符串在NSArray
?如何在NSArray中查找字符串?
我嘗試使用
[array indexOfObjectIdenticalTo:myString]
但需要刺痛具有相同的地址。
有沒有人有關於如何做到這一點的任何提示?
你想要the indexOfObject:
method,它通過發送消息的數組中的每個對象來查找對象。
彼得的回答是正確的。
一個額外的說明;如果陣列中有大量字符串,則-indexOfObject:
將執行線性搜索。這可能被證明是您應該考慮使用不同容器的性能瓶頸;一個NSSet或NSDictionary,可能(取決於字符串的含義)。
另一個問題是如果字符串都相對相似和/或相對較長。
當然,除非您使用分析工具來證明您遇到性能問題,否則不要打擾優化任何內容。
您可以使用NSOrderSet作爲容器,在NSOrderedSet類參考過的觀點是如下:
NSOrderedSet和它的子類,NSMutableOrderedSet,編程接口聲明的對象的有序集合。
NSOrderedSet聲明不同對象的靜態集合的編程接口。您>在創建靜態集時創建靜態集,然後無法修改條目。另一方面,NSMutableOrderedSet爲>動態集合的不同對象聲明一個編程接口。動態或可變集允許隨時添加和刪除條目,根據需要自動分配內存。
當元素的順序很重要時,您可以使用有序集合作爲數組的替代方法>並且在測試集合中是否包含對象時的性能是一個考慮因素 - >測試數組的成員資格比測試一組的成員資格。
containsObject:
返回一個布爾值,指示一個給定的對象是否存在在數組中。
返回值 YES如果anObject數組中存在的,否則NO。
討論
該方法確定是否anObject是通過發送的isEqual陣列中存在:消息發送到每個陣列的對象(和傳遞anObject作爲參數給每個isEqual:方法消息)。
宣佈
NSArray.h