2011-10-20 12 views
2

私は製品クラスの配列を持っています。それぞれの製品クラスは、名前、関数、成分などの複数のプロパティを持っています。関連性によってNSPredicateを使用して検索結果を並べ替える方法は?

NSPredicateを使用して単純な検索アルゴリズムを開発しました。これにより、製品の配列内の特定の文字列を検索できます。

簡潔に言えば、述語は次のようになります。 "product.nameまたはproduct.ingredientsのOR文字列product.functions ..."のようになります。

結果配列を正しく取得することができます。つまり、そのプロパティの1つに検索文字列を含む商品のリストを取得できます。

しかし、私の質問は、どのようにこの結果をRELEVANCEで並べ替えるのですか?つまり、検索文字列が商品クラスで複数回ヒットした場合、自然に検索結果配列の先頭にこの商品を配置したいのですか?

ありがとうございます!

答えて

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) 
関連する問題