【问题标题】:Convert ArrayList<double[][]> to double[][]将 ArrayList<double[][]> 转换为 double[][]
【发布时间】:2025-12-16 02:45:01
【问题描述】:

我有一个数组列表,其中每个元素都是一个double[1][3] 列表。现在如果数组列表包含 n 个成员,我希望我的输出是大小为double[n][3] 的列表。基于this post,我尝试了以下方法:

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);

它们都不适合我。任何帮助将非常感激。谢谢。

【问题讨论】:

    标签: java arrays arraylist


    【解决方案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-th 元素,这是一个二维数组,然后调用[0] 运算符来访问我们想要复制到目标数组的第二维。这一切都在列表中数组的第一个维度的大小等于 1 的要求下工作。

    // temp 是一个列表?

    不,它是一个二维数组 - 它是一个列表元素。

    您的第二个 sn-p 没有机会在这种情况下工作,因为 toArray 创建了一个数组,其中每个数组元素都是列表中的一个元素,因此将创建三维数组。但是,如果您仍然使用该方法,那么您将不得不提供一维数组作为该方法的参数(不是二维),因为toArray 接受并返回一维数组。在您的情况下,这将是一维数组,其中每个元素都是一个二维数组,这会导致您拥有不是您想要的三维数组。

    【讨论】:

      【解决方案2】:

      您的for 循环有了一个良好的开端。您现在只需将内容从temp 复制到testList,如下所示:

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

      【讨论】:

        【解决方案3】:

        ArrayList&lt;double[][]&gt;() :表示一维数组,其中每个元素都是一个二维数组。

        有多个double[][] 元素。

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

        如果您想将ArrayList&lt;double[][]&gt; 转换为double[][][],请将您的代码稍微更改为

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

        【讨论】:

        • testArray.get(i);不行,必须换成 testArray.get(i)[0];而是。