2016-06-09 90 views
0

我有一個數組列表,其中的每個元素是一個double[1][3]列表。現在,如果數組列表包含n個成員,我希望我的輸出成爲大小爲的列表。基於this post我試過如下:Convert ArrayList <double[][]> double [] []

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

我也試過如下:

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

他們都不是爲我工作。任何幫助將非常感激。謝謝。

回答

2

如果在列表中的所有陣列具有1維的大小等於1,則你可以嘗試:

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]; 
} 

我認爲這是非常簡單的,所以我只對此發表評論:

get(i)[0]

這需要i列表中的第二個元素,它是一個二維數組,然後調用[0]運算符,該運算符訪問我們想要複製到目標數組的第二個維度。它的所有工作都要求列表中數組的第一個維度的大小等於1。

// temp是一個列表?

不,它是一個二維數組 - 它是一個列表元素。

由於toArray創建了一個數組,其中每個數組元素都是來自列表中的元素,因此將創建三維數組,因此您的第二個片段無法在此情況下工作。但是,如果你使用該方法,那麼你將不得不提供一維數組作爲該方法的參數(而不是二維),因爲toArray需要並返回一維數組。在你的情況下,這將是一維數組,其中每個元素是一個二維數組,導致三維數組不是你想要的。

0

ArrayList<double[][]>():表示單維數組,其中每個元素是一個二維數組。

有多個double[][]元素。

如果你想要一個單一的元素,那麼你可以用.get(index)方法得到它。

如果要轉換ArrayList<double[][]>double[][][]然後稍微修改代碼爲

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

testArray.get(i);將不會工作,它必須被替換爲testArray.get(i)[0];代替。 – ahajib

1

您的for循環開始順利。你現在需要的是內容複製從temptestList,像這樣:

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

這將創建一個淺表副本。任何對testArray值的修改將通過testList數組「可見」。

關於命名的注意事項:testArray實際上是一個列表,而testList實際上是一個數組。

相關問題