gpt4 book ai didi

java - 如何在java中创建任意深度的嵌套数组?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:10:17 25 4
gpt4 key购买 nike

我正在尝试创建一个由数组组成的数组等...,但在运行时之前我不知道它需要嵌套多少层。

根据输入,我可能需要 int[]int[][]int[][][][][] [],或其他任何东西。 (对于上下文,我正在尝试为元胞自动机构造一个N 维网格,其中 N 作为参数传递。)

我没有任何代码给你,因为我不知道如何去做;我怀疑仅使用数组是不可能的。任何帮助或替代解决方案,我们将不胜感激。

最佳答案

您可以使用 Object[] 来做到这一点,将其成员限制为 Object[] 或 int[]。

例如,这是一个数组,其中一部分深三层,另一部分深两层:

   Object[] myarray = new Object[] {
new Object[] { new int[] { 1, 2 },
new int[] { 3, 4 }},
new int[] { 5, 6 }
};

创建它之后,您可能想要访问成员。在您的情况下,您预先知道深度 N,因此您知道期望 Object[] 的深度以及期望 int[] 的深度。

但是,如果您不知道深度,可以使用反射 来确定成员是另一个 Object[] 级别还是叶 int[]。

    if ( myarray[0] instanceof Object[] ) {
System.out.println("This should print true.");
}

编辑:

这是一个草图 [到目前为止尚未测试,抱歉] 一个方法,该方法在给定索引数组的情况下访问已知深度数组的成员。 m_root 成员可以是 Object[] 或 int[]。 (您可以进一步放松以支持标量。)

   public class Grid {
private int m_depth;
private Object m_root;
...
public int get( int ... indices ) {
assert( indices.length == m_depth );
Object level = m_root;
for ( int i = 0; i + 1 < m_depth; ++i ) {
level = ((Object[]) level)[ indices[i] ];
}
int[] row = (int[]) level;
return row[ indices[m_depth - 1] ];
}
}

关于java - 如何在java中创建任意深度的嵌套数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17479241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com