2016-09-10 7 views
1

私は約10.000エンティティのデータベースと50 NSString要素の動的NSArrayを持っています。それらの要素のそれぞれがデータベースに存在し、存在するものの新しい配列を作成するかどうかをチェックしたいと思います。 NSString配列(NSString配列と同じ)をすべて返す必要はありません。コアデータfetchRequestのパラメータとしてのNSArray

NSPredicateは、完全一致のentity.titleとNSString要素を比較する必要があります。


それを行うための効率的な方法最高とプロセッサ/メモリとは何ですか?

答えて

2

あなたの結果を得るには、あなたの述語で 'in'演算を使うべきだと思います。これにより、データベースを活用して比較を実行できます。比較するために10,000レコードすべてを取り戻すのではなく、比較を実行します。 - 私はスウィフト3.0互換性のあるコードをターゲットにしています - SWIFTはあなたが後にしている何だったかどうかわからない

// Assuming that arrayName is your existing array of values to match, that 
// EntityName is the object in CoreData that you’re looking at, and context 
// is your moc 

var newArray: [String] = [] 

let fetchRequest = NSFetchRequest<EntityName>(entityName: "EntityName") 
fetchRequest.predicate = NSPredicate(format: "title in %@", arrayName) 

do { 
    result = try context.fetch(fetchRequest) 
    for element in result { 
     newArray.append(element.title) 
    } 
} catch { 
    … manage any errors … 
} 

注:あなたがこのアプローチを取る場合は、あなたのコードは次のようになります。

+0

ありがとうございました。正確には、私はテーブル全体を引っ張ってはいけません。コアデータはすべての作業を行う必要があります。このソリューションは最適ですか?それ以上のアイデアがなければ、これを答えとしてチェックします。 – elektricni

+0

まだタイトル属性がない場合は、title属性にインデックスを追加する価値があります。 – pbasdf

+0

pbasdfによって提案されたインデックスは、あなたのアプリでのタイトルの使用に応じて役に立つかもしれませんが、そうでなければ私はこのアプローチの効率を高めることに何も気づいていません。 –

関連する問題