NSMutable配列にバンドルしている文字列のpListがあります。
NSString *path = [[NSBundle mainBundle] pathForResource:@"small" ofType:@"plist"];
_availableWords = [[NSMutableArray alloc]initWithContentsOfFile:path];
文字列内の各文字を指定された文字と比較し、その結果を使用して新しい配列を作成したいと思います。
以下を使用して、最初と最後の文字をフィルタリングできます
NSPredicate *filter = [NSPredicate predicateWithFormat:@"SELF beginswith[cd] %@", @"B"];
NSPredicate *filter = [NSPredicate predicateWithFormat:@"SELF endswith[cd] %@", @"B"];
しかし、characterAtIndexメソッドを使用して間にある文字をチェックしようとすると、エラーが発生します。
NSPredicate *filter = [NSPredicate predicateWithFormat:@"SELF characterAtIndex:%i LIKE[cd] %@", 3, @"B"];
文字をチェックする各単語をループするループを実行できる可能性があることはわかっていますが、NSPredicateの使用は非常に整理されており、文字列のリストが非常に大きくなる可能性があることを考えると、パフォーマンスが大幅に向上するはずです(100,000以上)。
NSPredicateでcharacterAtIndexを使用するための適切な構文を教えてもらえますか、または他のソリューションのアイデアがありますか?
更新:以下のKensの回答に基づいて、以下のコードを使用して、最初と最後の文字以外の文字をチェックしています。たとえば、以下は4番目の文字をチェックします。
NSArray *matches = [_availableWords objectsAtIndexes:[_availableWords indexesOfObjectsPassingTest:^(id obj, NSUInteger idx, BOOL *stop){
return (BOOL)([obj characterAtIndex:3] == 'R');
}]];
ただし、デバッガーで一致配列を検査すると、次のエラーが表示されます。
matches NSArray * 0x06a67ba0 @"Variable is not a CFArray"
配列にオブジェクトはありません。short.pListのサンプルデータに基づいて、配列内に1つのオブジェクトが表示されると思います。
助けてくれてありがとう、ダーム