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

标签 objective-c core-data nspredicate

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

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

简而言之,谓词类似于:“product.name 中的字符串或 product.ingredients 中的字符串或 product.functions 中的字符串...”。

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

但是,我的问题是,如何按相关性对结果进行排序?即,如果搜索字符串在产品类别中多次命中,我自然要将此产品放在搜索结果数组的顶部?

谢谢!

最佳答案

我编写了一个可能会回答您问题的示例。我并不是说这是最好的实现,但它确实有效。

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)

关于objective-c - 如何使用 NSPredicate 按相关性对搜索结果进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7839439/

相关文章:

core-data - 如何使用 NSPredicate 来过滤核心数据关系?

iphone - MPMoviePlayerController iO7 问题

ios - 在 iOS 应用程序中添加上下文帮助

ios - 如何使用 Parse 进行升序查询

ios - 从 Integer 16 到 Transformable 的核心数据迁移

ios - 如何连接两个字段以使用 NSPredicate 进行搜索?

objective-c - Objective-C 是否支持类变量?

objective-c - 有没有办法使用 NSPredicate 来发出 NSDeleteRequest 与 Core Data 中的 NSFetchRequest ?

ios - 更新大量 NSManagedObject 的有效方法

ios - 如何在搜索栏文本中显示?