【问题标题】:Get the dimension of an array(larger than 2D) java [duplicate]获取数组的维度(大于2D)java [重复]
【发布时间】:2017-05-10 20:39:35
【问题描述】:

我在 c# 中找到了这个问题的答案,但在 java 中没有。我想创建自己的类来处理向量和矩阵,并执行各种操作,例如点积。由于数组将被传递给类,而事先不知道它的维度,所以知道它很重要。我想知道是否有任何功能可以得到它。提前致谢。这是一个例子:

int[] array = new int[10]; //this would be a 1D array of length 10

int[][][] array2 = new int[5][10][2]; //This one is 3D of length 100

我想要的是“方括号的数量”,它说明了数组的维度。

【问题讨论】:

  • @BackSlash 我指的不是长度,而是尺寸(它有多少个方括号。[] 为 1,[][][] 为 3)。
  • 现在,问题是:为什么需要这个?编码时您将获得此信息,即使您将数组传递给方法,也不能将多维数组传递给仅接受单维数组的方法,反之亦然,因此在方法中您会知道这些信息当然。你想完成什么?
  • 致亲密的选民:这不是与关于二维数组大小的问题的重复。这是关于数组的维度,该数组仅被称为Object 类型的对象。
  • 然而,正如我现在注意到的那样,它是 stackoverflow.com/questions/23230854/… 的副本...

标签: java arrays multidimensional-array


【解决方案1】:

一个简单的解决方案是使用Class#isArrayClass#getComponentType 创建一个递归方法:

public class ArrayDimensions
{
    public static void main(String[] args)
    {
        Integer a = null;
        Integer a0 = 0;
        int a1[] = new int[0];
        int a2[][] = new int[0][0];
        int a3[][][] = new int[0][0][0];
        int a4[][][][] = new int[0][0][0][0];

        System.out.println(getDimensions(a)); // Prints -1
        System.out.println(getDimensions(a0)); // Prints 0
        System.out.println(getDimensions(a1)); // Prints 1
        System.out.println(getDimensions(a2)); // Prints 2
        System.out.println(getDimensions(a3)); // Prints 3
        System.out.println(getDimensions(a4)); // Prints 4
    }

    private static int getDimensions(Object array)
    {
        if (array == null)
        {
            return -1;
        }
        return getDimensions(array.getClass());
    }

    private static int getDimensions(Class<?> c)
    {
        if (c == null)
        {
            return 0;
        }
        if (!c.isArray())
        {
            return 0;
        }
        return 1 + getDimensions(c.getComponentType());
    }
}

附注:虽然这样的方法可能有应用案例,但是基于原始多维数组编写“矩阵和向量库”的意图听起来有点可疑(不一定是“错误”,而是但值得怀疑)

【讨论】:

    【解决方案2】:

    我不明白你要求的原因,但你可以这样做:

    int getBracketCount(Object array) {
        String className = array.getClass().getName();
    
        int bracketCount = className.length() - className.replace("[", "").length();
        return bracketCount;
    }
    

    数组的类名带有 N 个方括号,后跟数组的类名,其中 N 是数组的维数。

    因此,对于int[][][],类名将类似于[[[I。类名中的三个方括号 = 三个维度。对于简单的对象,您不应该在类名中使用方括号。

    这是一个演示:http://ideone.com/he8FDF

    【讨论】:

      猜你喜欢
      • 2018-04-19
      • 1970-01-01
      • 2011-05-05
      • 1970-01-01
      • 2012-08-12
      • 2012-05-01
      • 2017-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多