我有一个字符串 pList,我将其捆绑到 NSMutable 数组中。
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"];
我知道我可能会做一个循环来循环检查字符的每个单词,但是考虑到字符串列表可能非常大(超过 100,000 个),使用 NSPredicate 更加整洁并且性能应该更好。
谁能告诉我将 characterAtIndex 与 NSPredicate 一起使用的正确语法或有任何其他解决方案的想法?
更新:根据下面的 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 中的示例数据,我希望在数组中看到一个对象。
在此先感谢您的帮助,德姆