2

我有一个包含数组的字符串。例子:

"[[1, 2], [4, 5], [7, 8]]"

现在,我想用它制作一个实际的 Java 数组。我创建了一个函数来获取维度和一个递归函数来获取数组的每个元素。因此,我创建了每个一维数组,但我想知道在 Java 中是否有一种方法可以创建我在运行时找到的维度的数组?维度作为数组返回。就像,对于上面的例子,维度是:

[3, 2]

编辑:有没有办法从这些信息中创建一个实际的数组?维度 [3, 2] 只是一个示例。我也可以有 [3, 2, 4, 5]。可以在运行时根据这些信息生成一个数组吗?我在编译期间没有这些信息。

有一些问题,我无法评论答案。所以,我在这里编辑。

4

2 回答 2

2

如果您正在做数字工作,那么您可能应该使用库。例如,我的开源库Vectorz为多维数组/矩阵(带doubles)提供了适当的支持。

然后,您可以执行以下操作:

INDArray m=Arrayz.parse("[[1, 2], [4, 5], [7, 8]]");

INDArray 对象封装了所有的多维性,因此您不必一直担心编写大的嵌套循环,此外它还提供了许多普通 Java 数组所没有的其他功能和能力。

于 2013-07-10T08:52:35.307 回答
1

主要问题是您不能直接在代码中引用 N 维数组。

幸运的是,java 有一些肮脏的技巧,可以让你有一些方法来处理 N 维数组:

数组是对象,就像 java 中的所有其他非原始对象一样。

因此,您可以拥有:

// Note it's Object o not Object[] o
Object o = new Object [dimensionLengh];

您可以使用递归方法来构建它。

Object createMultyDimArray(int [] dimensionLengths) {
    return createMultyDimArray(dimensionLengths, 0);
}

Object createMultyDimArray(int [] dimensionLengths, int depth) {
    Object [] dimension = new Object[dimensionLengths[depth]];
    if (depth + 1 < dimensionLengths.length) {
        for (int i=0; i < dimensionLengths[depth]; i++) {
            dimension[i] = createMultyDimArray(dimensionLengths, depth+1);
        }
    }
    return dimension;
}

要使用它,您需要从Objectto 转换Object []

Java 在数组上是类型安全的,错误可能会导致 ClassCastException。我建议您还阅读有关如何使用 java 反射创建数组的信息:http: //docs.oracle.com/javase/tutorial/reflect/special/arrayInstance.html

于 2013-07-10T08:00:34.383 回答