1

ABとCのように3つのデータセットがあります。Aには5つの要素の単一配列が含まれています。Bには2D配列が含まれ、Cには2D配列も含まれます。Aには、BとCに依存しない5つの要素が含まれています。Aの各要素については、配列がBに関連付けられ、Bの配列の各要素については、配列がCに関連付けられています。したがって、これらのデータセットを格納します。データ構造内で、Aで要素を選択すると、Bで適切な要素配列が得られ、Bの配列で要素を選択すると、Cの要素が得られるようになります。このデータ構造。

4

2 に答える 2

1

私があなたを正しく理解していれば、あなたは A の要素から B の要素へ、およびそれらから C へのマッピングを探しています。これを実現する最も簡単な方法は、いくつかの、またはインターフェースをHashMaps実装する他のクラスを使用することです。Map

List<TypeA> a = new ArrayList<TypeA>();
Map<TypeA, List<TypeB>> b = new HashMap<TypeA, List<TypeB>>();
Map<TypeB, List<TypeC>> c = new HashMap<TypeB, List<TypeC>>();

このように、aあなたの配列Aです。からの要素を、2D 配列Bbの行であるリストにマップします。同様に、これらの行の要素をCの行であるリストにマップします。ac

Mapまたは、 3 つすべてに対して1 つの入れ子を使用することもできます。

Map<TypeA, Map<TypeB, List<TypeC>>> abc = 
        new HashMap<TypeA, Map<TypeB, List<TypeC>>>;

このようにして、キーはabc配列Aに対応します。各キーの値もマップであり、そのキーはA の要素に対応するBの行の要素です。最後に、これらの各キーの値は、 Bの要素に対応するCの行です。

a のキーMapは順序付けられていないことに注意してください。したがって、順序が重要な場合 (たとえば、特定の順序でAを反復処理する必要がある場合、または何らかのインデックスでアクセスする必要がある場合) は、最初のソリューションを使用する必要があります。順序が重要である場合はbcこれを試すことができます。

List<TypeA> a = new ArrayList<TypeA>();
List<List<TypeB>> b = new ArrayList<List<TypeB>>();
List<List<TypeC>> c = new ArrayList<List<TypeC>>();
Map<TypeA, Integer> ab = new HashMap<TypeA, Integer>();
Map<TypeB, Integer> bc = new HashMap<TypeB, Integer>();

ここで、abおよびは、 AB、およびCcに直接対応します(要素の数がわかっている場合は、配列も使用できます)。(または)の各要素から(または)の対応するインデックスへのマッピングを保持します。またはに要素を挿入するたびに、 とを更新する必要があることに注意してください。abbcabbcabbcab

したがって、順序が重要でない場合は、2 番目の解決策をお勧めします。この方法では「同期」する必要がないためaです。bc

于 2012-09-29T19:22:26.350 に答える
0
//         <Value, index in A>
vector<pair<Value, int>> A;
//                <Value, index in C>  
vector<vector<pair<Value, int>> B;
//            Values in C
vector<vector<Value>> C;

あなたの質問に対する私の理解が正しければ、C ++では上記のことを行うでしょうが、Javaについてはよくわかりません。

于 2012-09-28T07:34:57.970 に答える