2016-06-09 72 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实际上是一个数组。

相关问题