2017-01-15 10 views
0

私のアプリの検索機能を構築しています。でユーザーを検索しましょう。各ユーザーには、の名前、電子メール、およびIDの3つのフィールドがあります。私は、次のタスクを実行するより効率的な方法があるかどうかを調べようとしています。名前または電子メールを入力するとき、データが存在すると仮定して、他の2つのフィールドを取得する必要があります。3値以上で検索

は、今私は3つの2D配列に、データベースから取得していますすべてのユーザーのデータを整理しています:

var emailByName = [[String]]()  // ex: ["John Doe", "[email protected]"] 
var nameByEmail = [[String]]()  // ex: ["[email protected]", "John Doe"] 
var IdByEmail = [[String]]()  // ex: ["[email protected]", "123456789"] 

注意が同じ名前であってもよいが、メールとIDのは別個のものであることができます。

あなたが「[email protected]」を入力すると、最初のアプリは、IDを取得するために、その後IdByEmailで、人の名前を取得するためにnameByEmailに見えます。一方、名前を入力すると、emailByName配列が検索され、その結果がIdByEmail配列を検索するために使用されます。

私は3つの異なる配列を使用することは非常に効率的ではないという感覚があります。この三角検索を実現するためのよりよい方法はありますか?

答えて

1

id、name、emailの3つのプロパティを持つクラスまたは構造体が必要です。その後、配列の述部を使用して検索を実行します。それはあなたが行きたいところへの最も簡単なルートです。 NSPredicateに関する良いドキュメントがあり、それは配列で動作します。これはかなり優れています。

  1. は、クラスやプロトコルと
  2. は、すべての名前や電子メール

で検索をサポートするために、アレイに

  • 構築物NSPredicatesを入れて3つのプロパティを持つクラスまたは構造体を作りますそこにそれがある。

  • +0

    ありがとう、私は今述語を研究しています。 '.filter()'関数を使うべきだと思いますか? – MarksCode

    +0

    Filterもうまくいきます.Predicatesの利点は、配列やデータベース(CoreDataを使用することを前提としています)と同じアプローチであることです。また、私は非常に簡単な実装のためにほとんどの場合、フィルターを使用する傾向があります。両方のアプローチを処理するのはかなり簡単ですか?私は機能的なアプローチをかなりの量使っているが、多くの場合それが迷惑であることを認めた。 – Rob

    関連する問題