我不确定如何编写此NSPredicate
来实现以下目标。我有一系列前缀,我想知道它们中的任何一个(加上下划线)是否是给定字符串的前缀。我不需要知道哪个匹配,只要是/否,如果有匹配的话。
我现在无法解决这个问题,此时我已经有了这个
#import <Foundation/Foundation.h>
int main(int argc, char *argv[]) {
@autoreleasepool {
NSArray *bins = @[@"aaa", @"bbb", @"ccc"];
NSString* item = @"aaa_blah";
NSPredicate *pred = [NSPredicate predicateWithFormat:@"%@ BEGINSWITH SELF", item];
NSLog(@"%@", [[bins filteredArrayUsingPredicate:pred] count] ? @"YES" : @"NO");
}
}
我能想到的唯一方法是过滤数组 - 首先是有更好的方法吗?
其次,我希望只有前缀后跟下划线才能返回true
@[@"aaa", @"bbb", @"ccc"];
@"aaa_blah"; // YES
@"aaablah"; // NO
@"bbbblah"; // NO
我不确定该怎么做?
答案 0 :(得分:2)
+(void)checkIfExists:(NSArray *)prefixes inMyobjects:(NSArray *)myObjects withDivider:(NSString *)divider
{
divider = @"_";
prefixes = @[@"aaa",@"bbb",@"ccc"];
myObjects = @[@"aaa_sd",@"dsf_ds",@"aaa_sss",@"aaabbb"];
NSMutableArray * resultsOfPredicate = [NSMutableArray new];
for (NSString * pre in prefixes)
{
NSString * iAmLookingFor = [NSString stringWithFormat:@"%@%@", pre, divider];
NSPredicate *prefixPredicate = [NSPredicate predicateWithFormat:@"SELF beginsWith[c] %@", iAmLookingFor];
NSArray * resultOfSearch = [myObjects copy];
resultOfSearch = [resultOfSearch filteredArrayUsingPredicate:prefixPredicate];
NSLog(@"ros %@",resultOfSearch);
[resultsOfPredicate addObject:@([resultOfSearch count])];
}
for (int i = 0; i<[resultsOfPredicate count]; i++)
{
NSLog(@"prefix %@ isAppeared:%d",[prefixes objectAtIndex:i], [[resultsOfPredicate objectAtIndex:i] boolValue]);
}
}
我希望这会有所帮助。