为啥我不能像行一样简单地获得一维数组?

Posted

技术标签:

【中文标题】为啥我不能像行一样简单地获得一维数组?【英文标题】:Why can I not get a one dimensional array of a column as easy as a row?为什么我不能像行一样简单地获得一维数组? 【发布时间】:2018-10-25 22:06:57 【问题描述】:

背景

这是一个二维数组。-

String[][] names = "Sam", "Smith", "Robert", "Delgro", "James", "Gosling", ;

我可以通过调用来访问这些行: names[n] 其中 n 是边界之间的任何整数,在本例中为 0n。 同样 我可以这样称呼 String [] rowOne = names[0];


查询

现在问题仍然存在,而不是行,是否有一种方法可以访问 特定 列,就像访问 特定 行一样。


反馈

我想要对此建议的反馈。 在访问 2d 数组 中的列的特定情况下,names[][x] 将是调用特定列的声明,其中 0x.

String[] columnOne = names[][0]

这意味着names.length相当于调用names[][x].length

这也适用于数组大于而不是二维数组

String[][][]names = "Sam", "Smith", "Robert", "Delgro", "James", "Gosling";

只需添加额外的方括号。

例如在一个 3d 数组中,访问一个过道,这就是我将提到的第三维names[][][z],其中 0z

一维数组来自多维数组。

【问题讨论】:

您建议的语法是完全合理的。事实上,其他一些语言(例如 APL)确实 提供了类似的功能。只是不是 Java。 【参考方案1】:

...有没有办法像访问特定行一样访问特定列。

没有; Java 的多维数组本质上是包含对其他数组的引用的数组,这些数组在内存中并不连续。 Java 还允许数组是锯齿状的。假设您有以下多维数组:

int[][] array = 
    1, 2, 3,
    4, 5,
    6
;

致电array[][2],您希望收到什么? array[][3]呢?

为了能够得到一个列数组,您需要先转置多维数组。

【讨论】:

使用我的语法建议,array[][2] = 3;array[][3] 将不存在,因为数组从索引 0 开始。我同意数组必须转置。有趣的是,在当前语法下,'array[2] = 6;` 在元素方面类似于 array[2][0] = 6;。同样,使用建议的语法,array[][2] = 3; 就像 array[0][2] = 3;. @Paul 但是,如果交换行索引 0 和 1 处的数组,那么您建议的语法 array[][2] 将产生相同的结果,但是您丢失了索引,因此结果也必须包括null,但不能用于基元数组。

以上是关于为啥我不能像行一样简单地获得一维数组?的主要内容,如果未能解决你的问题,请参考以下文章

二维数组名不能赋值给二级指针- -

尽管没有一维数组,但在 Sklearn 中通过一维数组获得弃用警告

如何相应地用一维数组删除二维数组中的元素

为啥多维数组第一维的大小可以是任意的

c语言中整型的一维数组中每个元素地址的长度为啥会是4个字节??

通过像一维数组一样访问二维数组的双线性插值的概念