0

、にデータを動的に保存することに関連する問題がありtwo Dimensional String ArrayますString[][]String[i][j]配列にデータを動的に格納しています。ここでは、最初のインデックスの値は固定されてi=3いますが、2番目のインデックスの値はすべての行で異なります。

たとえば、私はこのような値を取得しています、

String arrElements[][] = {
        {"1"},
        {"abc", "xyz", "lkm", "pwd", "srt", "qwert"},
        {"1234", "3456"}
        };

私はこのような値を取得しています。つまり、最初の行には1つの値しかなく、2番目の行と3番目の行には任意の数の値があります。

私がこのように行けば、

    int i = 0, j = 0;
    String arrElements[][] = {};
    arrElements= new String[3][25];
            //What size should I define here.
    arrElements[0][0] = "Sahil";
    if (a == 0) { //Its just a logical representation of what I might be doing.
        // Store the value in second row
        arrElements[1][i] = a;
        i++;
    }
    if (a == 1) {
        // Store the value in third row
        arrElements[2][j] = a;
        j++;
    }

今、私はこれらの値をに設定していexpandable list Viewます。いずれかの行の値の数が指定されたサイズを超える場合、はになりますArrayOutOfBoundException。サイズが25未満の場合は、空の行が表示されます。

さて、配列インデックスにハードコードされたサイズ制限を与えたくありません。それに対処するためのより良い方法はありますか?

4

2 に答える 2

1

最初の発言として: あなたString[][]が達成したいものに適したデータ構造であると確信していますか? Collectionより適切なクラスがたくさんあります (ArrayList最も明白な名前を挙げると)。

本当に先に進みたい場合String[][]は、事前にサブ配列の長さを定義することはできませんが、行ごとに宣言する必要があります。

String[][] foo = new String[4][];
foo[0] = new String[1];
foo[1] = new String[2];
// .... 

ArrayListしかし、私が言ったように、動的にサイズ変更されるネストされたものに満足するかもしれません:

ArrayList<ArrayList<String>> foo = new ArrayList<ArrayList<String>>();
// Do the following for each row
foo.add(new ArrayList<String>>());
// Do the following to append data in row i
foo.get(i).add("new string");
// Do the following to retrieve column j in row i
foo.get(i).get(j);

実際に保存したいものによっては、他のデータ構造の方が適している場合があります。

于 2013-01-17T08:29:08.027 に答える
1

好きなデータ構造を使用できます。

ビューに渡すでは、とExpandableListAdapterから正しい値を返すようにしてください。およびでは、使用するバッキング構造 (データベース カーソル、リスト、リストのリストなど) から適切なデータを返します。getGroupCountgetChildrenCountgetGroupgetChild

このタイプのリストの便利な構造の 1 つにMap<GroupData, List<ChildData>>. HashMap<String, ArrayList<String>>これは、項目テキストが唯一のデータである場合と同じくらい単純かもしれません。

于 2013-01-17T08:24:53.980 に答える