3

Objective C で NSString を検索して、多数の異なる文字列を同時に検索することは可能ですか?

たとえば、非常に長い文字列で、「良い」、「素晴らしい」、「素晴らしい」、「信じられない」、「素晴らしい」、「素晴らしい」という文字列をすべて検索したいと考えています。

私の最初の方法は、NSString:rangeOfString: を使用して複数回 (文字列ごとに 1 回) 循環することですが、文字列のセットが長くなると、これは非効率的で遅くなる可能性があることに気付きました。

このような複数の文字列を検索する組み込みの方法はありますか、それとも独自の方法を作成する必要がありますか?

編集:結果が出ました!

ベンチマークを行う時間を見つけた後、RegEx メソッドはループrangeInStringメソッドよりも実際に遅い (2 倍以上遅い) ことがわかりました。数字は次のとおりです。

150,000 語(~1103,500 文字) と20 の一致語のリスト、5412の一致が存在する

NSString:rangeInString 検索 = 231.077ms
正規表現検索 = 530.113ms

4

3 に答える 3

4

文字列のセットが長くなると、これは非効率的で遅くなる可能性があることに気づきました。

それで、あなたはそれをベンチマークしましたか?そうでなければ、「非効率」「遅い」と判断する権利はありません。時期尚早の最適化は悪です。シンプルで素敵な for ループと- [NSString rangeOfString:]メソッドに固執してください。


しかし、実際にあなたの質問に答えるために、手動ループを避けることは不可能ではありません. NSRegularExpressionのような正規表現を使用すると、 good|great|awesome1 回のパスですべての出現箇所を見つけることができます。ただし、正規表現を使用すると、単純な文字列検索よりもおそらく遅くなります。

于 2013-08-22T16:05:10.113 に答える
0

はい、内部的に NSString は unichars のデータ blob です。それへのポインターを取得し、複数のキューにその一部を検索させることができますが、2 つの範囲の単語部分を見逃すように空白文字で分割する必要があります。

于 2013-08-22T16:13:20.537 に答える