Obj-c - массив фильтров для возврата словарей, в которых ключ содержит значения, перечисленные в NSMutableArray? - PullRequest
0 голосов
/ 16 октября 2018

У меня есть массив (allFriends), который возвращает количество словарей (данные примерно для 50 человек).Каждый словарь содержит ключ 'uid'.Я хочу отфильтровать allFriends так, чтобы все словари , в которых uid содержал числа 1,2,3 или 4, были возвращены.

Как мне это сделать?Числа, которые я хочу отфильтровать, возвращаются в массиве и захватываются следующим образом:

NSMutableArray *friendUIDs = [self.friendData valueForKey:@"uid"];

Возвращает данные в виде: "1, 2, 3, 4"

Независимо от того, что я пытаюсь, однако (думал, что NSPredicate будет подходить), мой код, похоже, не позволяет мне фильтровать несколько значений, разделенных запятой?

 NSArray *filteredData = [self.allFriends filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(uid contains[c] %@)", friendUIDs]];

Надеюсь, я правильно сформулировал это.

1 Ответ

0 голосов
/ 16 октября 2018

Ваш последний предикат должен выглядеть примерно так:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.uid contains[c] %@ OR SELF.uid contains[c] %@", @"1",@"2"];

Если я правильно понимаю вопрос, это должно сработать:

NSMutableArray *friendUIDs = [self.friendData valueForKey:@"uid"];
NSMutableString *predicateString = [NSMutableString string];
for (NSInteger i = 0; i < [friendUIDs count]; i++) {
    if (i != 0) {
        [predicateString appendString:@" OR "];
    }
    [predicateString appendFormat:@"SELF.uid contains[c] '%1$@'", friendUIDs[i]];
}

NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateString];
NSArray *filteredData = [allFriends filteredArrayUsingPredicate:predicate];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...