【问题标题】:How to sort a search result using NSPredicate by relevance?如何使用 NSPredicate 按相关性对搜索结果进行排序?
【发布时间】:2011-10-20 16:57:56
【问题描述】:

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

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

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

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

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

谢谢!

【问题讨论】:

    标签: objective-c core-data nspredicate


    【解决方案1】:

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

    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)
    

    【讨论】:

      猜你喜欢
      • 2012-01-28
      • 2011-11-26
      • 2014-05-24
      • 2010-11-04
      • 2020-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      相关资源
      最近更新 更多