2011-10-20 59 views
2

我有一个产品类的数组。每个产品类有多个属性,如名称,功能,成分等如何使用NSPredicate按相关性对搜索结果进行排序?

我开发使用NSPredicate一个简单的搜索算法,让我寻找的产品阵列中的一个特定的字符串。

简而言之,谓词是这样的:“字符串product.name或字符串在product.ingredients或product.functions串......”。

我可以得到结果阵列正确的,即产品清单包含在它的一个属性的搜索字符串。

,但我的问题是,如何将这种结果按相关性排序?也就是说,如果搜索字符串在产品类中多次访问,我当然希望将此产品放在搜索结果数组的顶部?

谢谢!

回答

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) 
相关问题