如何使用NSPredicate按相关性对搜索结果进行排序?

时间:2011-10-20 16:57:56

标签: objective-c core-data nspredicate

我有一系列产品类。每个产品类都有多个属性,如名称,功能,成分等。

我使用NSPredicate开发了一个简单的搜索算法,允许我在产品数组中搜索特定的字符串。

简而言之,谓词看起来像:“product.name中的字符串或product.ingredients中的字符串或product.functions中的字符串......”。

我可以正确获取结果数组,即在其中一个属性中包含搜索字符串的产品列表。

但我的问题是,如何通过RELEVANCE对此结果进行排序?即如果搜索字符串在产品类中多次出现,我自然希望将此产品放在搜索结果数组的顶部?

谢谢!

1 个答案:

答案 0 :(得分:0)

我编写了一个可以回答你问题的例子。我不是说这是最好的实现,但它确实有效。

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)