Подтвердить что ты не робот

Использование NSPredicate для поиска массива с массивом

У меня есть массив объектов Card (NSObjects), каждый из которых имеет поле с именем tags, которое представляет собой NSArray из NSStrings.

Затем я хотел бы разделить термин пользовательского поиска на массив keywords строк на componentsSeparatedByString, а затем использовать NSPredicate для фильтрации моего массива карт, на основе которого элементы имеют теги, содержащие по крайней мере 1 ключевое слово в keywords.

Я надеюсь, что это не слишком запутано! Я пробовал использовать предложение NSPredicate IN безрезультатно. Как мне это сделать?

4b9b3361

Ответ 1

Учитывая, что array содержит объект карты.

 NSArray *keyWordsList = [keywords componentSeparatedByString:@","];
 [array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"ANY %K IN %@",@"tags",keyWordsList]]

EDIT:

Для поиска частично вы можете использовать оператор LIKE.

[array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"ANY %K LIKE[cd] %@",@"tags",[partialkeyWord stringByAppendingString:@"*"]]]

Ответ 2

Не убивайте меня, если это не совсем правильно, но что-то вроде этого будет работать.

NSArray* arrayOfCards = [NSArray array];
NSArray* keywords = [NSArray array];
NSPredicate* containsAKeyword = [NSPredicate predicateWithBlock: ^BOOL(id evaluatedObject, NSDictionary *bindings) {
    Card* card = (Card*)evaluatedObject;
    NSArray* tagArray = card.tags;
    for(NSString* tag in tagArray) {
       if( [keywords containsObject: tag] ) 
          return YES;
    }

    return NO;
}];

NSArray* result = [arrayOfCards filteredArrayUsingPredicate: containsAKeyword];