2016-06-09 19 views
0

Ich habe eine Array-Liste, wo jedes Element davon eine double[1][3] Liste ist. Nun, wenn die Array-Liste n Mitglieder enthält, möchte ich, dass meine Ausgabe eine Liste der Größe ist. Basierend auf this post habe ich versucht, die folgenden:Convert ArrayList <double[][]> zu verdoppeln [] []

ArrayList<double[][]> testArray = new ArrayList<double[][]>(); 
double [][] testList = new double[testArray.size()][]; 
for(double [][] temp : testArray){ 
    // temp is a list?      
} 

Ich habe auch versucht die folgenden:

double [][] test = new double[testArray.size()][3]; 
test = testArray.toArray(test); 

Keiner von ihnen für mich arbeiten. Jede Hilfe würde sehr geschätzt werden. Vielen Dank.

Antwort

2

ändern Wenn alle Felder in der Liste 1. Dimension Größe gleich eins haben, dann können Sie versuchen:

ArrayList<double[][]> testArray = new ArrayList<double[][]>(); 
int testArraySize = testArray.size(); 
double [][] testList = new double[testArraySize][]; 

for (int i = 0; i < testArraySize; i++) { 
    testList[i] = testArray.get(i)[0]; 
} 

I denke, es ist ziemlich einfach, also werde ich nur dazu kommentieren:

get(i)[0]

Dies dauert i -th-Element aus der Liste, die ein zweidimensionales Array ist und dann [0] Operator aufgerufen wird, die zweite Dimension zugreifen, was ist, was wir in Ziel-Array kopieren möchten. Es funktioniert alles unter der Voraussetzung, dass die ersten Dimensionen von Arrays in der Liste eine Größe von eins haben.

// temp ist eine Liste?

Nein, es ist ein zweidimensionales Array - es ist ein Listenelement.

Ihr zweites Snippet hat keine Möglichkeit in diesem Fall zu arbeiten, da toArray ein Array erstellt, in dem jedes Array-Element ein Element aus der Liste ist, damit ein dreidimensionales Array erstellt wird. Aber wenn Sie diese Methode verwenden würden, müssten Sie eindimensionales Array als Parameter für diese Methode bereitstellen (nicht zweidimensional), weil toArray eindimensionales Array übernimmt und zurückgibt. In Ihrem Fall wäre das ein eindimensionales Array, in dem jedes Element ein zweidimensionales Array ist, das zu einem dreidimensionalen Array führt, das nicht das ist, was Sie wollen.

0

ArrayList<double[][]>(): bedeutet ein eindimensionales Array, in dem jedes Element ein zweidimensionales Array ist.

Es gibt mehrere double[][] Elemente. Wenn Sie ein einzelnes Element möchten, können Sie es mit .get(index) Methode erhalten.

Wenn Sie ArrayList<double[][]>-double[][][] konvertieren dann leicht der Code als

double[][][] testList = new double[testArray.size()][][]; 
for(int i=0;i<testArray.size();i++){ 
    testList[i] = testArray.get(i); 
} 
+0

testArray.get (i); funktioniert nicht, es muss durch testArray.get (i) [0] ersetzt werden; stattdessen. – ahajib

1

Sie haben einen guten Start mit Ihrer for Schleife. Alles, was Sie jetzt brauchen, ist Inhalt temp-testList, wie diese zu kopieren:

List<double[][]> testArray = new ArrayList<double[][]>(); 
double [][] testList = new double[testArray.size()][]; 
int pos = 0; 
for(double [][] temp : testArray){ 
    testList[pos++] = temp[0]; 
} 

Dies schafft eine flache Kopie. Alle Änderungen an den Werten von testArray werden über das Array testList "sichtbar" sein.

Hinweis zur Benennung:testArray ist eigentlich eine Liste, während testList eigentlich ein Array ist.