2017-08-04 6 views
0

それぞれに固有のエンティティに独自のタイトルが付いた20k個の固有ラベルがあります。CoreDataでエンティティを見つける最速の方法

エンティティへのアクセス権を取得する最も簡単な方法は、そのタイトルですか?私はこれを知っている

はそう

fetch.predicate = NSPredicate(format: "title contains %@", "example title") 

このアプローチの私の問題は、正しいものが見つかるまで、それは20Kエンティティのすべての単一の1を検索含むことであるように、述語を使用して行うことができます。

すべてのタイトルが何らかの理由でインデックスに登録されていて、すぐにどのラベルにもアクセスできる方法はありますか?連想配列内の項目に即座にアクセスする方法と同様に、array['item_name']と同様です。

ありがとうございました。

答えて

0

述語を使用すると、コアデータでどのように行うのですか。

何かをする前に、実際には問題がありますか?あなたはパフォーマンスの問題を見たことは言及していません。あなたは何かを持っていますか?これはまだ理論的な問題ですか?

コアデータモデルエディタでこの属性が "Indexed"ボックスにチェックされていることを確認して、パフォーマンスを向上させることができます。エンティティに、タイトルの数値ハッシュを含むフィールドを追加し、ハッシュに基づいてフェッチすることも考えられます。あなたはまだすべてのエンティティを検索していますが、文字列の代わりに数値の比較を行います。あなたは部分文字列の検索を行うことができません(containsを使用しているように)が、連想配列(これはまさにこの理由のためにハッシュとも呼ばれます)と同じことをします。

文字列を頻繁に検索していない場合は、高速検索のためにtrie構造を作成するなど、ニーズに適した別のデータモデルを調べる必要があります。

+0

ありがとうございました。私は「インデックス付き」チェックボックスがあることを認識していませんでした。整数は文字列よりも検索がはるかに高速です。なぜこれが説明できるのでしょうか? –

+0

プラットフォームや言語に関係なく、文字通りほとんど常にこの方法です。文字列の場合、各文字を順番に比較する必要があります。数字の場合は、1つの比較を行います。文字列の長さがN文字の長さの場合、数値の比較は平均してN倍高速です。 –

関連する問題