0

アプリに疑似検索機能を統合しようとしています。検索ヒントのリストを提供する検索ウィジェットがあります (これらのヒントは fts3 sqlite テーブルから取得されます)。ユーザーが検索ヒントをクリックすると、対応する sqlite テーブルが listView に入力されます。

選択した検索ヒントに基づいて、どのテーブルがリストに入力されるかを識別する方法が必要です。私はこのようなことを考えています:

switch(search_hint){
    case(search_hint_1):  useTable(table_1);
                          break;
    case(search_hint_2):  useTable(table_2);
                          break;
    case(search_hint_3):  useTable(table_1 + table_2); // Case when I need to use
                          break;                       // two tables for ListView
}

これは可能な解決策だと確信していますが、数百または数千のケースがある場合はどうなりますか? 誰かがこれに直面するより良い方法を提案できますか?

4

6 に答える 6

3

可能であれば、マッピングを何らかのペアの配列にすると、 afor-loopと anを使用してすべてを通過できますifリファクタリングの繰り返しガードステートメントでの私の提案に似ています。ヒントとテーブルを保持するクラスのようなペアを作成する必要があります。

それか、実際のマップを作成します。search_hint をキーとして使用します。

Map< /*insert hint type here*/,Table> mapTable;

例えば。

于 2013-02-05T09:10:53.893 に答える
2

私の考えによると、実行可能な方法だと思います。HashMapのキーと値のペアを使用します。(擬似コードのみ)

Map<Integer,String> mapTable = new HashMap<Integer,String>();
mapTable.put(search_hint_1,table_1);
.
.
.

そして、ただアクセスするuseTable(mapTable.get(search_hint));

于 2013-02-05T09:12:36.137 に答える
1

switchステートメントは、オブジェクト指向設計におけるアンチパターンです (オブジェクト思考を参照してください)。代わりに継承を使用する必要があります。

于 2013-02-05T09:21:04.370 に答える
0

情報を検索ヒント テーブルに入れます。あなたが持っているさまざまなケースと、それらを構成可能な小さな部分に分割する方法について少し考える必要があります。

search_hint_1  table_1
search_hint_2          table_2
search_hint_3  table_1 table_2
于 2013-02-05T09:14:45.397 に答える
0

列挙子を使用します。お気に入り :

private static enum DojoDecider {   

    search_hint_1(table_1),
    search_hint_2(table_2);     

    private Table var;      

    private DojoDecider(Table var) {
        this.var = var;
    }

    @SuppressWarnings("unused")
    public Table getVar() {
        return var;
    }           
}
于 2013-02-05T09:15:55.337 に答える
0
final int[] hintArray = {search_hint_1, search_hint_2, search_hint_3};
final String[] tableArray = {table_1, table_2, table_3};

private Map<Integer,String> hintMap = new HashMap<Integer,String>();

// Populate the map, probably at onCreate() of your activity
for(int i=0; i<hintArray.length; i++) {
    hintMap.put(hintArray[i], tableArray[i]);
}

// When you want to get it
useTable(hintMap.get(search_hint));
于 2013-02-05T09:16:43.967 に答える