NSPredicate 在 Objective C 中找到多个单词

NSPredicate finding multiple words in Objective C

我有这段代码可以在字符串中搜索特定的单词,例如 Canada Poland México 示例:

  NSString *valueOfUser = @"I want Poland"

   NSPredicate *pred =[NSPredicate predicateWithFormat: @"SELF contains[c] %@", valueOfUser];

    NSArray *arr = @[
                     @"Canada",
                     @"Poland",
                     @"México"
                     ];

    NSArray *filtered = [arr filteredArrayUsingPredicate: pred]; 
// But this array always contain 0 elements

我的错误在哪里?

我想找到如下解决方案:

NSString *valueOfUser = @"I want Poland"
filtered[0] -> "Poland"

NSString *valueOfUser = @"I choose Poland and México"
filtered[0] -> "Poland"
filtered[1] -> "México"

你的查询应该是相反的: valueOfUser CONTAINS[c] SELF,试试这个:

Objective C:

NSString *valueOfUser = @"I want Poland";

NSPredicate *pred =[NSPredicate predicateWithFormat: @"%@ contains[c] SELF", valueOfUser];

NSArray *arr = @[
                 @"Canada",
                 @"Poland",
                 @"México"
                 ];

NSArray *filtered = [arr filteredArrayUsingPredicate: pred];

Swift:

        let dataSource = ["Canada","Poland","México"] as NSArray
        let searchString =  "I choose Poland and México"
        let predicate = NSPredicate(format: "%@ contains[c] SELF", searchString)
        let dataArray = dataSource.filter { predicate.evaluate(with: [=11=]) }

有些人觉得这更易读

NSString *valueOfUser = @"I want Poland";

NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(NSString *evaluatedObject, NSDictionary *bindings) {
    return [valueOfUser containsString:evaluatedObject];
}];

NSArray *arr = @[
                 @"Canada",
                 @"Poland",
                 @"México"
                 ];

NSArray *filtered = [arr filteredArrayUsingPredicate:predicate];