8

iPhoneでアプリを検索するときと同じように、検索を実行するためにNSPredicateを使用しています。

たとえば、4つのキーワードがあるとします

  1. デカン
  2. ニューデリー
  3. アーメダバード
  4. サラーム・デリー

で述語を作成しようとしました

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"keyword BEGINSWITH[c] 'd'"出力としてDeccanが表示され ます。しかし、問題は、 dで始まる各単語が必要なことです。したがって、上記の例から、 Deccan、New Delhi、Salaam Delhiとして出力する必要がありますが、Ahmedab​​ad ではありません。

時間からこの問題に行き詰まりました。試してみましたが、私の不運..

正しい道への助けは本当に高く評価されます..

4

3 に答える 3

13

皆さんの回答に感謝します。これが私が思いついたものです

NSString *matchString =  [NSString stringWithFormat: @".*\\b%@.*",searchText];
NSString *predicateString = @"keyword MATCHES[c] %@";
NSPredicate *predicate =[NSPredicate predicateWithFormat: predicateString, matchString];
于 2012-04-23T10:23:39.807 に答える
1

あなたには2つの方法があります

  1. ステアリングを''で割り、NSPredicate *predicate = [NSPredicate predicateWithFormat:@"keyword BEGINSWITH[c] 'd'"]
  2. または、2つの述語を使用するためのより良い方法:

predicate = [NSPredicate predicateWithFormat:@"keyword BEGINSWITH[c] 'd' OR keyword contains[c] ' d'"]//i mean,'space+d'

したがって、考えられる両方のケースを満たします。

于 2012-04-23T10:07:03.623 に答える
0

「好き」と「一致」を考えてみましょう。ただし、これらは比較的コストのかかる操作であり、大規模なデータ セットではかなりの時間がかかる可能性があることに注意してください。

この例では、スペースで区切られた単語が「d」で始まる場合に一致することを望んでいると想定しています

これは、キーワードが 'd' で始まるか、または 'd' が続くシーケンスを持っているかどうかを確認します。

[NSPredicate predicateWithFormat:@"(keyword BEGINSWITH[c] 'd') OR (keyword LIKE[c] '* d')"]

これは非常によく似た正規表現を使用しています (状況に最適な正規表現を使用してください:

[NSPredicate predicateWithFormat:@"keyword MATCHES[c] '^d.*|.*\\sd.*'"]
于 2012-04-23T10:20:15.350 に答える