- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个字符串 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"];
我知道我可能会做一个循环来遍历检查字符的每个单词,但是使用 NSPredicate 更加简洁,并且考虑到字符串列表可能非常大(超过 100,000),性能应该好得多。
谁能告诉我将 characterAtIndex 与 NSPredicate 一起使用的正确语法或有任何其他解决方案想法?
更新:根据下面的 Kens 回答,我现在使用下面的代码来检查第一个和最后一个字符之外的字符。例如,下面检查第 4 个字符。
NSArray *matches = [_availableWords objectsAtIndexes:[_availableWords indexesOfObjectsPassingTest:^(id obj, NSUInteger idx, BOOL *stop){
return (BOOL)([obj characterAtIndex:3] == 'R');
}]];
但是,当我在调试器中检查 matches 数组时,我看到以下错误
matches NSArray * 0x06a67ba0 @"Variable is not a CFArray"
并且数组中没有对象。根据 short.pList 中的示例数据,我希望在数组中看到一个对象。
在此先感谢您的帮助,皮肤
最佳答案
内置谓词不支持这样的操作。但是,您可以构建一个评估 block 的谓词:
NSPredicate* filter = [NSPredicate predicateWithBlock:^(id evaluatedObject, NSDictionary *bindings){
return (BOOL)([evaluatedObject characterAtIndex:3] == 'B');
}];
或者,如果你只是想转过来用这个谓词过滤一个数组,你可以去掉中间人并使用一个 block 直接识别数组的元素:
NSArray* matches = [array objectsAtIndexes:[array indexesOfObjectsPassingTest:^(id obj, NSUInteger idx, BOOL *stop){
return (BOOL)([obj characterAtIndex:3] == 'B');
}]];
关于objective-c - 将 characterAtindex 与 Objective-C NSPredicate 类一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10165066/
我收到错误消息 Incompatible integer to pointer conversion sending 'unichar' (aka 'unsigned short') to param
我使用以下简单的方法来显示我的 NSString 中的每个字母/字符,并计算我的 NSString 是否少于 14 个字母,然后显示来自的其余字母Unichar 数组,总共 14 个字母。 这里是一个
这个问题在这里已经有了答案: Get nth character of a string in Swift (47 个回答) 关闭 7 年前。 我尝试在不同的简单 Objective-C 项目之间来
我正在使用以下 UITextFieldDelegate 方法: func textField(textField: UITextField, shouldChangeCharactersInRange
我是 Objective C 的新手,来自 C++ 和 C# 背景。我需要做一些字符串操作。由于我需要在字符级别进行操作,我担心为每个字符调用函数会太慢。例如。在 C/C++ 中,使用 const c
我是 Objective-C 的新手,作为一个非常简单的学习练习,我创建了一个方法来返回存储名称的变量的首字母: -(NSString *)initial { return [_name su
我试图逐个字符地遍历 NSString,但我收到了 EXC_BAD_ACCESS 错误。你知道如何正确地做到这一点吗?我已经在谷歌上搜索了几个小时,但无法弄明白。 这是我的代码(.m): self.t
我有一个字符串 pList,我正在将其捆绑到一个 NSMutable 数组中。 NSString *path = [[NSBundle mainBundle] pathForResource:@"sm
NSString *htmlString = [NSString stringWithFormat:@" body { font-family: Mehr Nastaliq Web;
我是一名优秀的程序员,十分优秀!