2011-10-20 64 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) 
相關問題