我需要使用NSComparisonPredicate检查我的数组中的字符串是否为空。正在执行的谓词是:string MATCHES [c]“” 但结果中没有显示任何内容,它不会列出我的空字符串。 我的谓词是错的还是只有另一种用NSPredicate处理空字符串的方法?
答案 0 :(得分:1)
正如上面提到的 rdelmar ,对于这样的任务,你应该只通过string.length==0
检查字符串的长度
答案 1 :(得分:1)
我不确定你为什么使用NSComparisonPredicate,我从来没用过那个,所以我不熟悉它。你试过过predicateWithFormat吗?
NSPredicate *pred = [NSPredicate predicateWithFormat:@"self.length == 0"];
目前尚不清楚如何使用谓词,但如果您使用它来过滤数组,这应该可行。
如果你想知道数组中的字符串索引为空,那么你可以使用indicesOfObjectsPassingTest:如下所示:
NSIndexSet *indxs = [array indexesOfObjectsPassingTest:^BOOL(NSString *aString, NSUInteger idx, BOOL *stop) {
return aString.length == 0;
}];
NSLog(@"%@",indxs);
答案 2 :(得分:0)
您可以使用块过滤数组。我建议使用NSPredicate的方法。以下是一些示例代码:
//creating array
NSArray *myArray = [NSArray arrayWithObjects:@"a", @"b", @"", @"c", nil];
//filtering
NSIndexSet *iset = [myArray indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
NSString *str = obj;
return !str.length;
}
];
//creating my result array with empty strings
NSArray *emptyStrings = [myArray objectsAtIndexes:iset];
//logging all strings
for (NSString *str in myArray) {
NSLog(@"string: %@", str);
}
//logging empty strings
for (NSString *str in emptyStrings) {
NSLog(@"empty string: %@", str);
}
修改强> 如果你真的需要使用NSComparisonPredicate,那么它是:
NSExpression *left = [NSExpression expressionForKeyPath:@"length"];
NSExpression *right = [NSExpression expressionForConstantValue:[NSNumber numberWithInt:0]];
NSComparisonPredicateModifier modifier = NSDirectPredicateModifier;
NSPredicateOperatorType operator = NSEqualToPredicateOperatorType;
NSPredicate *predicate = [NSComparisonPredicate predicateWithLeftExpression:left rightExpression:right modifier:modifier type:operator options:0];
NSArray *filtered = [myArray filteredArrayUsingPredicate:predicate];