我有一系列产品类别。每个产品类别都有多个属性,例如名称、功能、成分等。
我使用 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/