1

いくつかの行にループして、これらの行をいくつかの if ステートメントでフィルター処理しようとしています。各 if ステートメント内に、多数の要素のインデックスが必要です。2d String[][] を使用してそれを行うこともできましたが、問題は、この段階で各行のサイズがわからないことです。

次のようなデータを保存しようとしています。

    0     1    3    4    5    6    7  etc.. 
 0 str   str  str  str  str  str  str
 1 str   str  str  
 2 
 3 str   str  str  str  str  str  

どんな提案でもいただければ幸いです

 Edit:

私の質問が明確でなかったら申し訳ありません。しかし、ここで詳しく説明します。

私のループは次のようになります。

newArrayList
for (i; i < List ;i++)
{
  if(...)
  {
    newArrayList.add.(0, List.get(i));
  } else if(...)
  {
    newArrayList.add.(2, List.get(i));
  } else if(...)
  {
    newArrayList.add.(6, List.get(i));
  }
 }

上記のコードは機能しませんが、実際に何をする必要があるかを説明しようとしています! 私の if ステートメントは複数回発生する可能性があり、各 if ステートメントの期待値と一連の文字列のインデックスを検討したいと思います。ありがとう。

4

3 に答える 3

2

You could try an ArrayList of ArrayList's:

    ArrayList<ArrayList<String>> strings = new ArrayList<ArrayList<String>>();
    strings.add(new ArrayList<String>()); // Adding a first array to the 'array of arrays'
    strings.get(0).add("String1"); // Add a string to the first array,
                                   // Similar to: arr[0][0] = "String1"

    //To access them element by element use a double for, note that "s" is each element
    for (ArrayList<String> l : strings) {
        for (String s : l) {

        }
    }

PS: An ArrayList<Object> is like an array Object[] but more flexible. It has some useful methods like:

arr_list.get(index); // Getting an object in position 'index'
arr_list.add(object); // Adding an element (Similar to assignment in arrays)

Edit

If you know the number of "rows" then you have to add them to the array of arrays. With this for you are "creating the empty rows of your array":

Rows:
   0
   1
  ...
   n


for (int i = 0; i < n; i++) {    // n is the number of "rows"
    strings.add(new ArrayList<String>());
}

Then add an element to a "row":

strings.get(0).add("String1"); // get(0) to obtain the first row, get(1) to obtain the second...
于 2013-10-26T06:57:10.370 に答える
1

インデックスが 0 から n まで連続しており、それらをその順序で挿入しているが、n が事前にわからない場合: 2 つの古典的な解決策があります。

1)事前に割り当てられた固定配列でそれを行う場合、明らかに2つのパスが必要です。最初のパスでは、行をスキャンして要素を数えます。次に、2 番目のパスでインデックスを作成します。

2) List のような .add(item) メソッドを介して動的な成長を可能にするコレクションでそれを行うことができます

後でコレクションを固定サイズの配列に変換する場合は、メモリ管理/割り当て/再割り当てのために add メソッドが遅くなる可能性があるため、方法 1) を使用する方が速い場合があります。

インデックスが 0 から n まで連続しており、n が事前にわかっているが、その順序ではない要素を挿入している場合:

上記の解決策 1) を使用する必要があります。

インデックスが連続しておらず、n が事前にわかっている場合:

3) を作成し、(任意の順序で)Map<Integer,String> stringsを介して要素を追加します。strings.put(index, string)

インデックスが一意でない場合 (最終的にわかったとおり):

4) をクレートし、次の方法Map<Integer,ArrayList<String>> stringMapで要素を追加します

addStringForIndex(String string, Integer index)
{
    listForString = stringMap.get(index);
    if(listForString == null) {
        listForString = new ArrayList<String>;
        map.put(index, listForString);
    }
    listForString.add(string);
}
于 2013-10-26T06:59:46.837 に答える
0

配列のサイズがわからない場合は、次のように List 実装を使用できます。

ArrayList<ArrayList<String>> 2D = new ArrayList<ArrayList<String>>();

そして、for-each ループを使用します

于 2013-10-26T06:58:18.273 に答える