Как отсортировать результаты поиска с помощью NSPredicate по релевантности? - PullRequest
3 голосов
/ 20 октября 2011

У меня есть массив классов товаров. Каждый класс продукта имеет несколько свойств, таких как имя, функции, ингредиенты и т. Д.

Я разработал простой алгоритм поиска с использованием NSPredicate, который позволяет мне искать определенную строку в массиве продуктов.

В двух словах, предикат выглядит следующим образом: «строка в product.name ИЛИ строка в product.ingredients ИЛИ строка в product.functions ...».

Я могу правильно получить массив результатов, т. Е. Список продуктов, который содержит строку поиска в одном из своих свойств.

НО, у меня вопрос, как отсортировать этот результат по релевантности? то есть, если строка поиска встречается несколько раз в классе продукта, естественно, я хочу поместить этот продукт в верхнюю часть массива результатов поиска?

Спасибо!

1 Ответ

0 голосов
/ 29 августа 2013

Я привел пример, который может ответить на ваш вопрос.Я не говорю, что это лучшая реализация, но она работает.

NSArray *strings = @[@"A",@"B",@"C",@"A",@"D",@"E",@"B",@"B",@"B"];

NSMutableDictionary *sortedDictionary = [NSMutableDictionary dictionary];
for (NSString *string in strings) {
    NSNumber *count = [sortedDictionary objectForKey:string];
    if (count) {
        count = @(count.integerValue + 1);
    } else {
        count = @(1);
    }
    [sortedDictionary setObject:count forKey:string];
}

NSArray *result = [sortedDictionary keysSortedByValueWithOptions:NSNumericSearch usingComparator:^NSComparisonResult(id obj1, id obj2) {
    return [obj2 compare:obj1];
}];
NSLog(@"%@", result); // (B,A,D,E,C)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...