18

これはばかげた質問のように思えますが、どうすれば文字列を見つけることができますNSArrayか ?

使ってみた

[array indexOfObjectIdenticalTo:myString]

ただし、それには文字列が同じアドレスを持つ必要があります。

これを行う方法に関するヒントはありますか?

4

4 に答える 4

51

配列内の各オブジェクトにメッセージを送信してオブジェクトを検索するindexOfObject:メソッドが必要です。isEqual:

于 2009-11-28T17:58:27.613 に答える
13

ピーターの答えは正しいです。

1 つの追加メモ; 配列に大量の文字列がある場合-indexOfObject:、線形検索を実行します。これはパフォーマンスのボトルネックになる可能性があり、別のコンテナーの使用を検討する必要があります。おそらく NSSet または NSDictionary (文字列の意味による)。

もう 1 つの落とし穴は、文字列がすべて比較的似ているか、および/または比較的長い場合です。

もちろん、分析ツールを使用してパフォーマンスの問題があることを証明するまでは、何も最適化しないでください。

于 2009-11-28T19:09:22.010 に答える
4

NSOrderSet をコンテナーとして使用できます。NSOrderedSet クラス リファレンスの概要は次のとおりです。

NSOrderedSet とそのサブクラスである NSMutableOrderedSet は、順序付けられたオブジェクトのコレクションへのプログラム インターフェイスを宣言します。

NSOrderedSet は、個別のオブジェクトの静的セットのプログラム インターフェイスを宣言します。作成時に静的セットのエントリを確立し、その後エントリを変更することはできません。一方、NSMutableOrderedSet は、異なるオブジェクトの動的セットのプログラム インターフェイスを宣言します。動的 (可変) セットを使用すると、エントリをいつでも追加および削除でき、必要に応じてメモリが自動的に割り当てられます。

要素の順序が重要であり、オブジェクトがセットに含まれているかどうかをテストする際のパフォーマンスが考慮される場合は、配列の代わりに順序付きセットを使用できます — >配列のメンバーシップのテストは、セットのメンバーシップのテストよりも遅くなります.

http://developer.apple.com/library/mac/#documentation/Foundation/Reference/NSOrderedSet_Class/Reference/Reference.html にアクセスしてください。

于 2011-12-31T15:53:16.277 に答える