NSPredicate将字符串与前缀数组匹配

时间:2014-09-10 17:17:45

标签: objective-c nspredicate

我不确定如何编写此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

我不确定该怎么做?

1 个答案:

答案 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]);
    }
}

我希望这会有所帮助。