2011-06-24 16 views
-1

NSStringのNSArrayオブジェクトを数えたいと思います。私のNSArrayは@"a"@"w"オブジェクト、そして私の文字列は@"abcdefgw"です。私は@"w"オブジェクトが何回文字列に入っているか知りたいです。文字列にNSArrayオブジェクトの番号を見つける

+0

私はあなたが何を意味するか分かりません。 'count'メッセージを送ることで、配列内のオブジェクトの数を得ることができます。 'length'メッセージを送ることで、文字列中の文字数を得ることができます。 –

答えて

2

- (NSArray *)componentsSeparatedByString:(NSString *)separatorを使用できますが、境界の問題がある可能性があります。また、このようなstringByReplacingOccurrencesOfString:withString:を使用することができます。

NSString *shortString = [myString stringByReplacingOccurrencesOfString:@"w" withString:@""]; 
return mystring.length-shortString.length; 
+0

+1かなりスマート。 –

+0

私はそれが好きですが、複数の文字の検索を許可する場合は、検索文字列の長さで除算する必要があります。 –

+0

ありがとう、その非常に助けてくれました。 – mahyar

0

あなたは範囲を毎回縮小し、その後のサブストリングを検索する必要がありますサブストリングをカウントするために探している場合...のようなものを。

-(NSInteger)occurrencesOfSubstring:(NSString *)substring inString:(NSString *)string 
{ 
    int occurrences =0; 

    NSRange searchRange = NSMakeRange(0, [string length]); 
    NSRange foundRange; 
    do { 
     foundRange = [string rangeOfString:substring options:NSCaseInsensitiveSearch range:searchRange]; 
     if ((foundRange.location != NSNotFound)) { 
      occurrences++; 
      searchRange.location = foundRange.location+foundRange.length; 
      searchRange.length = [string length] - (foundRange.location+foundRange.length); 
     } 
    }while (foundRange.location != NSNotFound);  

    return occurrences; 
} 
+0

これは**非常に遅いです。 'NSRange'のオーバーヘッドを避けるために、文字列を実行して各文字をチェックするほうが速くなります。 – PengOne

+0

なぜスカラー型が遅くなると思いますか?あなたはそれをプロファイルしましたか? –

+0

はい。私にとっては、 'rangeOfString'を繰り返し使用することは、各文字を読み込むよりも約50%遅くなりました。これは数ヶ月前と少なくとも1回のiOSアップデート前であったため、パフォーマンスが大幅に改善された可能性があります。このような単純な例のために、私はそれが違いを生むのではないかと疑います。しかし、これを繰り返し呼び出す必要がある場合、コストがかかる可能性があります。 – PengOne

関連する問題